diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2024-08-16 18:09:26 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-16 12:09:26 +0200 |
| commit | 83484cfb60e1587125b707795ce38e43de4bf667 (patch) | |
| tree | da6f9dc37432548777a54b6913f43b7ae37a32c6 /src | |
| parent | a10608239704c354f53b1420529d0602ed30e995 (diff) | |
| download | box64-83484cfb60e1587125b707795ce38e43de4bf667.tar.gz box64-83484cfb60e1587125b707795ce38e43de4bf667.zip | |
Added more curl function wrapper (#1738)
Diffstat (limited to 'src')
| -rw-r--r-- | src/wrapped/generated/functions_list.txt | 3 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedcurltypes.h | 4 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.c | 2 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.h | 1 | ||||
| -rw-r--r-- | src/wrapped/wrappedcurl.c | 150 | ||||
| -rw-r--r-- | src/wrapped/wrappedcurl_private.h | 26 |
6 files changed, 172 insertions, 14 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt index f14c7c14..91881f3a 100644 --- a/src/wrapped/generated/functions_list.txt +++ b/src/wrapped/generated/functions_list.txt @@ -2355,6 +2355,7 @@ #() vFpppppip #() vFppppppu #() vFppppppp +#() iFElppppp #() iFEpupppp #() iFEpUuppp #() iFEpLiLpp @@ -3279,6 +3280,8 @@ wrappedcurl: - uFpup: - curl_easy_setopt - curl_share_setopt +- iFlppppp: + - curl_global_init_mem wrappedd3dadapter9: - pWp: - D3DAdapter9GetProc diff --git a/src/wrapped/generated/wrappedcurltypes.h b/src/wrapped/generated/wrappedcurltypes.h index 145009e5..5576f7a6 100644 --- a/src/wrapped/generated/wrappedcurltypes.h +++ b/src/wrapped/generated/wrappedcurltypes.h @@ -13,10 +13,12 @@ typedef int32_t (*iFpup_t)(void*, uint32_t, void*); typedef uint32_t (*uFpup_t)(void*, uint32_t, void*); +typedef int32_t (*iFlppppp_t)(intptr_t, void*, void*, void*, void*, void*); #define SUPER() ADDED_FUNCTIONS() \ GO(curl_multi_setopt, iFpup_t) \ GO(curl_easy_setopt, uFpup_t) \ - GO(curl_share_setopt, uFpup_t) + GO(curl_share_setopt, uFpup_t) \ + GO(curl_global_init_mem, iFlppppp_t) #endif // __wrappedcurlTYPES_H_ diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c index 5a9620c1..ed48f1f4 100644 --- a/src/wrapped/generated/wrapper.c +++ b/src/wrapped/generated/wrapper.c @@ -2393,6 +2393,7 @@ typedef void (*vFppppipi_t)(void*, void*, void*, void*, int32_t, void*, int32_t) typedef void (*vFpppppip_t)(void*, void*, void*, void*, void*, int32_t, void*); typedef void (*vFppppppu_t)(void*, void*, void*, void*, void*, void*, uint32_t); typedef void (*vFppppppp_t)(void*, void*, void*, void*, void*, void*, void*); +typedef int32_t (*iFElppppp_t)(x64emu_t*, intptr_t, void*, void*, void*, void*, void*); typedef int32_t (*iFEpupppp_t)(x64emu_t*, void*, uint32_t, void*, void*, void*, void*); typedef int32_t (*iFEpUuppp_t)(x64emu_t*, void*, uint64_t, uint32_t, void*, void*, void*); typedef int32_t (*iFEpLiLpp_t)(x64emu_t*, void*, uintptr_t, int32_t, uintptr_t, void*, void*); @@ -5547,6 +5548,7 @@ void vFppppipi(x64emu_t *emu, uintptr_t fcn) { vFppppipi_t fn = (vFppppipi_t)fcn void vFpppppip(x64emu_t *emu, uintptr_t fcn) { vFpppppip_t fn = (vFpppppip_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } void vFppppppu(x64emu_t *emu, uintptr_t fcn) { vFppppppu_t fn = (vFppppppu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8)); } void vFppppppp(x64emu_t *emu, uintptr_t fcn) { vFppppppp_t fn = (vFppppppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFElppppp(x64emu_t *emu, uintptr_t fcn) { iFElppppp_t fn = (iFElppppp_t)fcn; R_RAX=(int32_t)fn(emu, (intptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } void iFEpupppp(x64emu_t *emu, uintptr_t fcn) { iFEpupppp_t fn = (iFEpupppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } void iFEpUuppp(x64emu_t *emu, uintptr_t fcn) { iFEpUuppp_t fn = (iFEpUuppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } void iFEpLiLpp(x64emu_t *emu, uintptr_t fcn) { iFEpLiLpp_t fn = (iFEpLiLpp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h index 9063346a..b1d0158a 100644 --- a/src/wrapped/generated/wrapper.h +++ b/src/wrapped/generated/wrapper.h @@ -2393,6 +2393,7 @@ void vFppppipi(x64emu_t *emu, uintptr_t fnc); void vFpppppip(x64emu_t *emu, uintptr_t fnc); void vFppppppu(x64emu_t *emu, uintptr_t fnc); void vFppppppp(x64emu_t *emu, uintptr_t fnc); +void iFElppppp(x64emu_t *emu, uintptr_t fnc); void iFEpupppp(x64emu_t *emu, uintptr_t fnc); void iFEpUuppp(x64emu_t *emu, uintptr_t fnc); void iFEpLiLpp(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped/wrappedcurl.c b/src/wrapped/wrappedcurl.c index 06a49a0c..e5186080 100644 --- a/src/wrapped/wrappedcurl.c +++ b/src/wrapped/wrappedcurl.c @@ -718,6 +718,146 @@ static void* find_ssl_ctx_callback_Fct(void* fct) return NULL; } +// malloc_callback +#define GO(A) \ + static uintptr_t my_malloc_callback_fct_##A = 0; \ + static void* my_malloc_callback_##A(size_t a) \ + { \ + return (void*)RunFunctionFmt(my_malloc_callback_fct_##A, "L", a); \ + } +SUPER() +#undef GO +static void* find_malloc_callback_Fct(void* fct) +{ + if (!fct) return NULL; + if (GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); +#define GO(A) \ + if (my_malloc_callback_fct_##A == (uintptr_t)fct) return my_malloc_callback_##A; + SUPER() +#undef GO +#define GO(A) \ + if (my_malloc_callback_fct_##A == 0) { \ + my_malloc_callback_fct_##A = (uintptr_t)fct; \ + return my_malloc_callback_##A; \ + } + SUPER() +#undef GO + printf_log(LOG_NONE, "Warning, no more slot for curl malloc_callback callback\n"); + return NULL; +} + +// free_callback +#define GO(A) \ + static uintptr_t my_free_callback_fct_##A = 0; \ + static void my_free_callback_##A(void* a) \ + { \ + RunFunctionFmt(my_free_callback_fct_##A, "p", a); \ + } +SUPER() +#undef GO +static void* find_free_callback_Fct(void* fct) +{ + if (!fct) return NULL; + if (GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); +#define GO(A) \ + if (my_free_callback_fct_##A == (uintptr_t)fct) return my_free_callback_##A; + SUPER() +#undef GO +#define GO(A) \ + if (my_free_callback_fct_##A == 0) { \ + my_free_callback_fct_##A = (uintptr_t)fct; \ + return my_free_callback_##A; \ + } + SUPER() +#undef GO + printf_log(LOG_NONE, "Warning, no more slot for curl free_callback callback\n"); + return NULL; +} + +// realloc_callback +#define GO(A) \ + static uintptr_t my_realloc_callback_fct_##A = 0; \ + static void* my_realloc_callback_##A(void* a, size_t b) \ + { \ + return (void*)RunFunctionFmt(my_realloc_callback_fct_##A, "pL", a, b); \ + } +SUPER() +#undef GO +static void* find_realloc_callback_Fct(void* fct) +{ + if (!fct) return NULL; + if (GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); +#define GO(A) \ + if (my_realloc_callback_fct_##A == (uintptr_t)fct) return my_realloc_callback_##A; + SUPER() +#undef GO +#define GO(A) \ + if (my_realloc_callback_fct_##A == 0) { \ + my_realloc_callback_fct_##A = (uintptr_t)fct; \ + return my_realloc_callback_##A; \ + } + SUPER() +#undef GO + printf_log(LOG_NONE, "Warning, no more slot for curl realloc_callback callback\n"); + return NULL; +} + +// strdup_callback +#define GO(A) \ + static uintptr_t my_strdup_callback_fct_##A = 0; \ + static void* my_strdup_callback_##A(void* a) \ + { \ + return (void*)RunFunctionFmt(my_strdup_callback_fct_##A, "p", a); \ + } +SUPER() +#undef GO +static void* find_strdup_callback_Fct(void* fct) +{ + if (!fct) return NULL; + if (GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); +#define GO(A) \ + if (my_strdup_callback_fct_##A == (uintptr_t)fct) return my_strdup_callback_##A; + SUPER() +#undef GO +#define GO(A) \ + if (my_strdup_callback_fct_##A == 0) { \ + my_strdup_callback_fct_##A = (uintptr_t)fct; \ + return my_strdup_callback_##A; \ + } + SUPER() +#undef GO + printf_log(LOG_NONE, "Warning, no more slot for curl strdup_callback callback\n"); + return NULL; +} + + +// calloc_callback +#define GO(A) \ + static uintptr_t my_calloc_callback_fct_##A = 0; \ + static void* my_calloc_callback_##A(size_t a, size_t b) \ + { \ + return (void*)RunFunctionFmt(my_calloc_callback_fct_##A, "LL", a, b); \ + } +SUPER() +#undef GO +static void* find_calloc_callback_Fct(void* fct) +{ + if (!fct) return NULL; + if (GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); +#define GO(A) \ + if (my_calloc_callback_fct_##A == (uintptr_t)fct) return my_calloc_callback_##A; + SUPER() +#undef GO +#define GO(A) \ + if (my_calloc_callback_fct_##A == 0) { \ + my_calloc_callback_fct_##A = (uintptr_t)fct; \ + return my_calloc_callback_##A; \ + } + SUPER() +#undef GO + printf_log(LOG_NONE, "Warning, no more slot for curl calloc_callback callback\n"); + return NULL; +} #undef SUPER EXPORT uint32_t my_curl_easy_setopt(x64emu_t* emu, void* handle, uint32_t option, void* param) @@ -796,4 +936,14 @@ EXPORT uint32_t my_curl_share_setopt(x64emu_t* emu, void* handle, CURLSHoption o } } +EXPORT int my_curl_global_init_mem(x64emu_t* emu, long flags, void* m, void* f, void* r, void* s, void* c) +{ + return my->curl_global_init_mem(flags, + find_malloc_callback_Fct(m), + find_free_callback_Fct(f), + find_realloc_callback_Fct(r), + find_strdup_callback_Fct(s), + find_calloc_callback_Fct(c)); +} + #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedcurl_private.h b/src/wrapped/wrappedcurl_private.h index e672b1b3..ce198abe 100644 --- a/src/wrapped/wrappedcurl_private.h +++ b/src/wrapped/wrappedcurl_private.h @@ -24,20 +24,20 @@ GO(curl_free, vFp) //GO(curl_getenv, GO(curl_global_cleanup, vFv) GO(curl_global_init, uFu) -//GO(curl_global_init_mem, +GOM(curl_global_init_mem, iFElppppp) GO(curl_global_sslset, uFupp) -//GO(curl_maprintf, -//GO(curl_mfprintf, -//GO(curl_mime_addpart, -//GO(curl_mime_data, -//GO(curl_mime_data_cb, -//GO(curl_mime_encoder, -//GO(curl_mime_filedata, -//GO(curl_mime_filename, -//GO(curl_mime_free, -//GO(curl_mime_headers, -//GO(curl_mime_init, -//GO(curl_mime_name, +// GO(curl_maprintf, +// GO(curl_mfprintf, +GO(curl_mime_addpart, pFp) +GO(curl_mime_data, iFppL) +// GO(curl_mime_data_cb, +// GO(curl_mime_encoder, +GO(curl_mime_filedata, iFpp) +// GO(curl_mime_filename, +// GO(curl_mime_free, +// GO(curl_mime_headers, +GO(curl_mime_init, pFp) +GO(curl_mime_name, iFpp) //GO(curl_mime_subparts, //GO(curl_mime_type, //GO(curl_mprintf, |