about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2024-08-16 18:09:26 +0800
committerGitHub <noreply@github.com>2024-08-16 12:09:26 +0200
commit83484cfb60e1587125b707795ce38e43de4bf667 (patch)
treeda6f9dc37432548777a54b6913f43b7ae37a32c6 /src
parenta10608239704c354f53b1420529d0602ed30e995 (diff)
downloadbox64-83484cfb60e1587125b707795ce38e43de4bf667.tar.gz
box64-83484cfb60e1587125b707795ce38e43de4bf667.zip
Added more curl function wrapper (#1738)
Diffstat (limited to 'src')
-rw-r--r--src/wrapped/generated/functions_list.txt3
-rw-r--r--src/wrapped/generated/wrappedcurltypes.h4
-rw-r--r--src/wrapped/generated/wrapper.c2
-rw-r--r--src/wrapped/generated/wrapper.h1
-rw-r--r--src/wrapped/wrappedcurl.c150
-rw-r--r--src/wrapped/wrappedcurl_private.h26
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,