MCPcopy Create free account
hub / github.com/ValveSoftware/Proton / convert_callback_utow

Function convert_callback_utow

lsteamclient/unixlib.cpp:1227–1267  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1225}
1226
1227void convert_callback_utow( int id, void *u_callback, int u_callback_len, void *w_callback, int w_callback_len, bool wow64 )
1228{
1229 const struct callback_def *c, *end, *best;
1230
1231 if (!(c = find_first_callback_def_by_id( id, wow64 )))
1232 {
1233 memcpy( w_callback, u_callback, u_callback_len );
1234 return;
1235 }
1236
1237 if (wow64) end = wow64_callback_data + wow64_callback_data_size;
1238 else end = callback_data + callback_data_size;
1239
1240 best = NULL;
1241 while (c != end && c->id == id)
1242 {
1243 if (c->w_callback_len == w_callback_len && c->u_callback_len == u_callback_len)
1244 {
1245 best = c;
1246 break;
1247 }
1248 if ((!best || best->w_callback_len > w_callback_len)
1249 && c->u_callback_len == u_callback_len && c->w_callback_len <= w_callback_len)
1250 best = c;
1251 if (!best && c->u_callback_len == u_callback_len)
1252 best = c;
1253 ++c;
1254 }
1255 if (!best)
1256 {
1257 ERR( "Could not find id %d, u_callback_len %d, w_callback_len %d.\n", id, u_callback_len, w_callback_len );
1258 best = find_first_callback_def_by_id( id, wow64 );
1259 }
1260
1261 if (best->w_callback_len != w_callback_len || best->u_callback_len != u_callback_len)
1262 WARN( "Found len %d, %d for id %d, len %d, %d.\n", best->w_callback_len, best->u_callback_len,
1263 id, w_callback_len, u_callback_len );
1264
1265 if (best->conv_w_from_u) best->conv_w_from_u( w_callback, u_callback );
1266 else memcpy( w_callback, u_callback, u_callback_len );
1267}
1268
1269#if defined(__x86_64__) || defined(__aarch64__)
1270#define STEAMCLIENT_UNIX_WOW64_FUNC( name ) \

Calls 1

Tested by

no test coverage detected