about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-06-02 12:09:21 +0200
committerptitSeb <sebastien.chev@gmail.com>2025-06-02 12:09:21 +0200
commit1b131d28dfceef1fc7eafde3a76b3816e6a426bd (patch)
tree9f72e54dcd455b94c7769bfe7633b245d9be52de /src
parentec2e94249bfbbe7f5d88bc945751e09b3afe21f9 (diff)
downloadbox64-1b131d28dfceef1fc7eafde3a76b3816e6a426bd.tar.gz
box64-1b131d28dfceef1fc7eafde3a76b3816e6a426bd.zip
[BOX32][WRAPPER] Added wrapped 32bits libcurl (need testing)
Diffstat (limited to 'src')
-rw-r--r--src/library_list_32.h3
-rw-r--r--src/wrapped32/generated/functions_list.txt18
-rw-r--r--src/wrapped32/generated/wrappedcurldefs32.h8
-rw-r--r--src/wrapped32/generated/wrappedcurltypes32.h24
-rw-r--r--src/wrapped32/generated/wrappedcurlundefs32.h8
-rw-r--r--src/wrapped32/generated/wrapper32.c20
-rw-r--r--src/wrapped32/generated/wrapper32.h10
-rw-r--r--src/wrapped32/wrappedcurl.c946
-rw-r--r--src/wrapped32/wrappedcurl_private.h85
9 files changed, 1122 insertions, 0 deletions
diff --git a/src/library_list_32.h b/src/library_list_32.h
index d299e8ae..a9da0f4b 100644
--- a/src/library_list_32.h
+++ b/src/library_list_32.h
@@ -105,6 +105,9 @@ GO("libcups.so", libcups)
 GO("libgbm.so.1", gbm)
 GO("libgbm.so", gbm)
 GO("libdbus-1.so.3", dbus)
+GO("libcurl.so.4", curl)
+GO("libcurl-gnutls.so.4", curl)
+GO("libcurl.so.3", curl)
 
 //GO("crashhandler.so", crashhandler)
 GO("libtcmalloc_minimal.so.0", tcmallocminimal)
diff --git a/src/wrapped32/generated/functions_list.txt b/src/wrapped32/generated/functions_list.txt
index c8976ab2..c190dd45 100644
--- a/src/wrapped32/generated/functions_list.txt
+++ b/src/wrapped32/generated/functions_list.txt
@@ -663,6 +663,7 @@
 #() uFuup -> uFuup
 #() uFupp -> uFupp
 #() uFpii -> uFpii
+#() uFpip -> uFpip
 #() uFpuU -> uFpuU
 #() uEpup -> uEpup
 #() uFpup -> uFpup
@@ -990,6 +991,7 @@
 #() iFEpui -> iFEpui
 #() iFEpuu -> iFEpuu
 #() iEEpup -> iEEpup
+#() iFEpup -> iFEpup
 #() iFEpll -> iFEpll
 #() iEEpLi -> iEEpLi
 #() iFEpLi -> iFEpLi
@@ -1043,6 +1045,7 @@
 #() iFpiII -> iFpiII
 #() iFpiuu -> iFpiuu
 #() iFpili -> iFpili
+#() iFpipu -> iFpipu
 #() iFpipL -> iFpipL
 #() iEpipp -> iEpipp
 #() iFpipp -> iFpipp
@@ -1070,6 +1073,7 @@
 #() iFppLi -> iFppLi
 #() iFppLI -> iFppLI
 #() iFppLu -> iFppLu
+#() iFppLp -> iFppLp
 #() iFpppi -> iFpppi
 #() iFpppu -> iFpppu
 #() iEpppL -> iEpppL
@@ -1108,8 +1112,10 @@
 #() uFEpii -> uFEpii
 #() uFEpip -> uFEpip
 #() uFEpiV -> uFEpiV
+#() uFEpup -> uFEpup
 #() uFuuuu -> uFuuuu
 #() uFuppd -> uFuppd
+#() uFpiip -> uFpiip
 #() uFpCCC -> uFpCCC
 #() uFppii -> uFppii
 #() uFppip -> uFppip
@@ -1447,6 +1453,7 @@
 #() iFppiUi -> iFppiUi
 #() iFppipp -> iFppipp
 #() iFppWup -> iFppWup
+#() iFppuip -> iFppuip
 #() iFppupu -> iFppupu
 #() iFppLpL -> iFppLpL
 #() iFpppip -> iFpppip
@@ -1725,6 +1732,7 @@
 #() iFXppppp -> iFXppppp
 #() uFEpippi -> uFEpippi
 #() uFupuufp -> uFupuufp
+#() uFpppppp -> uFpppppp
 #() lEipLipu -> lEipLipu
 #() lEipLipp -> lEipLipp
 #() pFEpiiuu -> pFEpiiuu
@@ -1848,6 +1856,7 @@
 #() vFXLppipi -> vFXLppipi
 #() vFXpiipii -> vFXpiipii
 #() vFXppiiii -> vFXppiiii
+#() iFElppppp -> iFElppppp
 #() iEEpLiipp -> iEEpLiipp
 #() iEEpLiipV -> iEEpLiipV
 #() iEEpLiLpV -> iEEpLiLpV
@@ -2117,6 +2126,7 @@
 #() vFuiiiiiuiiiiilll -> vFuiiiiiuiiiiilll
 #() vFuuiiiiuuiiiiiii -> vFuuiiiiuuiiiiiii
 #() vFfffffffffffffff -> vFfffffffffffffff
+#() iFpppppppppppppppp -> iFpppppppppppppppp
 #() vFuuuuiiiiuuiiiiiii -> vFuuuuiiiiuuiiiiiii
 #() vFXpuiiiiipuiiiiiiii -> vFXpuiiiiipuiiiiiiii
 #() uFippuuuuiiiiuuiiiiiiiipp -> uFippuuuuiiiiuuiiiiiiiipp
@@ -2150,6 +2160,14 @@ wrappedcairo:
   - cairo_xlib_surface_create
   - cairo_xlib_surface_create_for_bitmap
 wrappedcrashhandler:
+wrappedcurl:
+- iFpup:
+  - curl_multi_setopt
+- uFpup:
+  - curl_easy_setopt
+  - curl_share_setopt
+- iFlppppp:
+  - curl_global_init_mem
 wrappeddbus:
 - vFp:
   - dbus_free_string_array
diff --git a/src/wrapped32/generated/wrappedcurldefs32.h b/src/wrapped32/generated/wrappedcurldefs32.h
new file mode 100644
index 00000000..c154a870
--- /dev/null
+++ b/src/wrapped32/generated/wrappedcurldefs32.h
@@ -0,0 +1,8 @@
+/*********************************************************************
+ * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) *
+ *********************************************************************/
+#ifndef __wrappedcurlDEFS32_H_
+#define __wrappedcurlDEFS32_H_
+
+
+#endif // __wrappedcurlDEFS32_H_
diff --git a/src/wrapped32/generated/wrappedcurltypes32.h b/src/wrapped32/generated/wrappedcurltypes32.h
new file mode 100644
index 00000000..0633c46f
--- /dev/null
+++ b/src/wrapped32/generated/wrappedcurltypes32.h
@@ -0,0 +1,24 @@
+/*********************************************************************
+ * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) *
+ *********************************************************************/
+#ifndef __wrappedcurlTYPES32_H_
+#define __wrappedcurlTYPES32_H_
+
+#ifndef LIBNAME
+#error You should only #include this file inside a wrapped*.c file
+#endif
+#ifndef ADDED_FUNCTIONS
+#define ADDED_FUNCTIONS() 
+#endif
+
+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_global_init_mem, iFlppppp_t)
+
+#endif // __wrappedcurlTYPES32_H_
diff --git a/src/wrapped32/generated/wrappedcurlundefs32.h b/src/wrapped32/generated/wrappedcurlundefs32.h
new file mode 100644
index 00000000..fa5e4d19
--- /dev/null
+++ b/src/wrapped32/generated/wrappedcurlundefs32.h
@@ -0,0 +1,8 @@
+/*********************************************************************
+ * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) *
+ *********************************************************************/
+#ifndef __wrappedcurlUNDEFS32_H_
+#define __wrappedcurlUNDEFS32_H_
+
+
+#endif // __wrappedcurlUNDEFS32_H_
diff --git a/src/wrapped32/generated/wrapper32.c b/src/wrapped32/generated/wrapper32.c
index 569e951c..b04c5a86 100644
--- a/src/wrapped32/generated/wrapper32.c
+++ b/src/wrapped32/generated/wrapper32.c
@@ -757,6 +757,7 @@ typedef uint32_t (*uFuuu_t)(uint32_t, uint32_t, uint32_t);
 typedef uint32_t (*uFuup_t)(uint32_t, uint32_t, void*);
 typedef uint32_t (*uFupp_t)(uint32_t, void*, void*);
 typedef uint32_t (*uFpii_t)(void*, int32_t, int32_t);
+typedef uint32_t (*uFpip_t)(void*, int32_t, void*);
 typedef uint32_t (*uFpuU_t)(void*, uint32_t, uint64_t);
 typedef uint32_t (*uEpup_t)(void*, uint32_t, void*);
 typedef uint32_t (*uFpup_t)(void*, uint32_t, void*);
@@ -1084,6 +1085,7 @@ typedef int32_t (*iFEpip_t)(x64emu_t*, void*, int32_t, void*);
 typedef int32_t (*iFEpui_t)(x64emu_t*, void*, uint32_t, int32_t);
 typedef int32_t (*iFEpuu_t)(x64emu_t*, void*, uint32_t, uint32_t);
 typedef int32_t (*iEEpup_t)(x64emu_t*, void*, uint32_t, void*);
+typedef int32_t (*iFEpup_t)(x64emu_t*, void*, uint32_t, void*);
 typedef int32_t (*iFEpll_t)(x64emu_t*, void*, intptr_t, intptr_t);
 typedef int32_t (*iEEpLi_t)(x64emu_t*, void*, uintptr_t, int32_t);
 typedef int32_t (*iFEpLi_t)(x64emu_t*, void*, uintptr_t, int32_t);
@@ -1137,6 +1139,7 @@ typedef int32_t (*iFpiip_t)(void*, int32_t, int32_t, void*);
 typedef int32_t (*iFpiII_t)(void*, int32_t, int64_t, int64_t);
 typedef int32_t (*iFpiuu_t)(void*, int32_t, uint32_t, uint32_t);
 typedef int32_t (*iFpili_t)(void*, int32_t, intptr_t, int32_t);
+typedef int32_t (*iFpipu_t)(void*, int32_t, void*, uint32_t);
 typedef int32_t (*iFpipL_t)(void*, int32_t, void*, uintptr_t);
 typedef int32_t (*iEpipp_t)(void*, int32_t, void*, void*);
 typedef int32_t (*iFpipp_t)(void*, int32_t, void*, void*);
@@ -1164,6 +1167,7 @@ typedef int32_t (*iFppup_t)(void*, void*, uint32_t, void*);
 typedef int32_t (*iFppLi_t)(void*, void*, uintptr_t, int32_t);
 typedef int32_t (*iFppLI_t)(void*, void*, uintptr_t, int64_t);
 typedef int32_t (*iFppLu_t)(void*, void*, uintptr_t, uint32_t);
+typedef int32_t (*iFppLp_t)(void*, void*, uintptr_t, void*);
 typedef int32_t (*iFpppi_t)(void*, void*, void*, int32_t);
 typedef int32_t (*iFpppu_t)(void*, void*, void*, uint32_t);
 typedef int32_t (*iEpppL_t)(void*, void*, void*, uintptr_t);
@@ -1202,8 +1206,10 @@ typedef uint32_t (*uFEuip_t)(x64emu_t*, uint32_t, int32_t, void*);
 typedef uint32_t (*uFEpii_t)(x64emu_t*, void*, int32_t, int32_t);
 typedef uint32_t (*uFEpip_t)(x64emu_t*, void*, int32_t, void*);
 typedef uint32_t (*uFEpiV_t)(x64emu_t*, void*, int32_t, void*);
+typedef uint32_t (*uFEpup_t)(x64emu_t*, void*, uint32_t, void*);
 typedef uint32_t (*uFuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t);
 typedef uint32_t (*uFuppd_t)(uint32_t, void*, void*, double);
+typedef uint32_t (*uFpiip_t)(void*, int32_t, int32_t, void*);
 typedef uint32_t (*uFpCCC_t)(void*, uint8_t, uint8_t, uint8_t);
 typedef uint32_t (*uFppii_t)(void*, void*, int32_t, int32_t);
 typedef uint32_t (*uFppip_t)(void*, void*, int32_t, void*);
@@ -1541,6 +1547,7 @@ typedef int32_t (*iFpuppp_t)(void*, uint32_t, void*, void*, void*);
 typedef int32_t (*iFppiUi_t)(void*, void*, int32_t, uint64_t, int32_t);
 typedef int32_t (*iFppipp_t)(void*, void*, int32_t, void*, void*);
 typedef int32_t (*iFppWup_t)(void*, void*, uint16_t, uint32_t, void*);
+typedef int32_t (*iFppuip_t)(void*, void*, uint32_t, int32_t, void*);
 typedef int32_t (*iFppupu_t)(void*, void*, uint32_t, void*, uint32_t);
 typedef int32_t (*iFppLpL_t)(void*, void*, uintptr_t, void*, uintptr_t);
 typedef int32_t (*iFpppip_t)(void*, void*, void*, int32_t, void*);
@@ -1819,6 +1826,7 @@ typedef int32_t (*iFXppppi_t)(void*, void*, void*, void*, void*, int32_t);
 typedef int32_t (*iFXppppp_t)(void*, void*, void*, void*, void*, void*);
 typedef uint32_t (*uFEpippi_t)(x64emu_t*, void*, int32_t, void*, void*, int32_t);
 typedef uint32_t (*uFupuufp_t)(uint32_t, void*, uint32_t, uint32_t, float, void*);
+typedef uint32_t (*uFpppppp_t)(void*, void*, void*, void*, void*, void*);
 typedef intptr_t (*lEipLipu_t)(int32_t, void*, uintptr_t, int32_t, void*, uint32_t);
 typedef intptr_t (*lEipLipp_t)(int32_t, void*, uintptr_t, int32_t, void*, void*);
 typedef void* (*pFEpiiuu_t)(x64emu_t*, void*, int32_t, int32_t, uint32_t, uint32_t);
@@ -1942,6 +1950,7 @@ typedef void (*vFXLLuuuu_t)(void*, uintptr_t, uintptr_t, uint32_t, uint32_t, uin
 typedef void (*vFXLppipi_t)(void*, uintptr_t, void*, void*, int32_t, void*, int32_t);
 typedef void (*vFXpiipii_t)(void*, void*, int32_t, int32_t, void*, int32_t, int32_t);
 typedef void (*vFXppiiii_t)(void*, void*, void*, int32_t, int32_t, int32_t, int32_t);
+typedef int32_t (*iFElppppp_t)(x64emu_t*, intptr_t, void*, void*, void*, void*, void*);
 typedef int32_t (*iEEpLiipp_t)(x64emu_t*, void*, uintptr_t, int32_t, int32_t, void*, void*);
 typedef int32_t (*iEEpLiipV_t)(x64emu_t*, void*, uintptr_t, int32_t, int32_t, void*, void*);
 typedef int32_t (*iEEpLiLpV_t)(x64emu_t*, void*, uintptr_t, int32_t, uintptr_t, void*, void*);
@@ -2211,6 +2220,7 @@ typedef void (*vFuddiiddiiddiip_t)(uint32_t, double, double, int32_t, int32_t, d
 typedef void (*vFuiiiiiuiiiiilll_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, intptr_t, intptr_t, intptr_t);
 typedef void (*vFuuiiiiuuiiiiiii_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t);
 typedef void (*vFfffffffffffffff_t)(float, float, float, float, float, float, float, float, float, float, float, float, float, float, float);
+typedef int32_t (*iFpppppppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*);
 typedef void (*vFuuuuiiiiuuiiiiiii_t)(uint32_t, uint32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t);
 typedef void (*vFXpuiiiiipuiiiiiiii_t)(void*, void*, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t);
 typedef uint32_t (*uFippuuuuiiiiuuiiiiiiiipp_t)(int32_t, void*, void*, uint32_t, uint32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*, void*);
@@ -2906,6 +2916,7 @@ void uFuuu_32(x64emu_t *emu, uintptr_t fcn) { uFuuu_t fn = (uFuuu_t)fcn; R_EAX =
 void uFuup_32(x64emu_t *emu, uintptr_t fcn) { uFuup_t fn = (uFuup_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); }
 void uFupp_32(x64emu_t *emu, uintptr_t fcn) { uFupp_t fn = (uFupp_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); }
 void uFpii_32(x64emu_t *emu, uintptr_t fcn) { uFpii_t fn = (uFpii_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); }
+void uFpip_32(x64emu_t *emu, uintptr_t fcn) { uFpip_t fn = (uFpip_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); }
 void uFpuU_32(x64emu_t *emu, uintptr_t fcn) { uFpuU_t fn = (uFpuU_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint64_t, R_ESP + 12)); }
 void uEpup_32(x64emu_t *emu, uintptr_t fcn) { uEpup_t fn = (uEpup_t)fcn; errno = emu->libc_err; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); emu->libc_err = errno; }
 void uFpup_32(x64emu_t *emu, uintptr_t fcn) { uFpup_t fn = (uFpup_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); }
@@ -3233,6 +3244,7 @@ void iFEpip_32(x64emu_t *emu, uintptr_t fcn) { iFEpip_t fn = (iFEpip_t)fcn; R_EA
 void iFEpui_32(x64emu_t *emu, uintptr_t fcn) { iFEpui_t fn = (iFEpui_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); }
 void iFEpuu_32(x64emu_t *emu, uintptr_t fcn) { iFEpuu_t fn = (iFEpuu_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); }
 void iEEpup_32(x64emu_t *emu, uintptr_t fcn) { iEEpup_t fn = (iEEpup_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); emu->libc_err = errno; }
+void iFEpup_32(x64emu_t *emu, uintptr_t fcn) { iFEpup_t fn = (iFEpup_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); }
 void iFEpll_32(x64emu_t *emu, uintptr_t fcn) { iFEpll_t fn = (iFEpll_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_long(from_ptri(long_t, R_ESP + 12))); }
 void iEEpLi_32(x64emu_t *emu, uintptr_t fcn) { iEEpLi_t fn = (iEEpLi_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12)); emu->libc_err = errno; }
 void iFEpLi_32(x64emu_t *emu, uintptr_t fcn) { iFEpLi_t fn = (iFEpLi_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12)); }
@@ -3286,6 +3298,7 @@ void iFpiip_32(x64emu_t *emu, uintptr_t fcn) { iFpiip_t fn = (iFpiip_t)fcn; R_EA
 void iFpiII_32(x64emu_t *emu, uintptr_t fcn) { iFpiII_t fn = (iFpiII_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int64_t, R_ESP + 12), from_ptri(int64_t, R_ESP + 20)); }
 void iFpiuu_32(x64emu_t *emu, uintptr_t fcn) { iFpiuu_t fn = (iFpiuu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); }
 void iFpili_32(x64emu_t *emu, uintptr_t fcn) { iFpili_t fn = (iFpili_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16)); }
+void iFpipu_32(x64emu_t *emu, uintptr_t fcn) { iFpipu_t fn = (iFpipu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); }
 void iFpipL_32(x64emu_t *emu, uintptr_t fcn) { iFpipL_t fn = (iFpipL_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16))); }
 void iEpipp_32(x64emu_t *emu, uintptr_t fcn) { iEpipp_t fn = (iEpipp_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); emu->libc_err = errno; }
 void iFpipp_32(x64emu_t *emu, uintptr_t fcn) { iFpipp_t fn = (iFpipp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); }
@@ -3313,6 +3326,7 @@ void iFppup_32(x64emu_t *emu, uintptr_t fcn) { iFppup_t fn = (iFppup_t)fcn; R_EA
 void iFppLi_32(x64emu_t *emu, uintptr_t fcn) { iFppLi_t fn = (iFppLi_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16)); }
 void iFppLI_32(x64emu_t *emu, uintptr_t fcn) { iFppLI_t fn = (iFppLI_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(int64_t, R_ESP + 16)); }
 void iFppLu_32(x64emu_t *emu, uintptr_t fcn) { iFppLu_t fn = (iFppLu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(uint32_t, R_ESP + 16)); }
+void iFppLp_32(x64emu_t *emu, uintptr_t fcn) { iFppLp_t fn = (iFppLp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16)); }
 void iFpppi_32(x64emu_t *emu, uintptr_t fcn) { iFpppi_t fn = (iFpppi_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); }
 void iFpppu_32(x64emu_t *emu, uintptr_t fcn) { iFpppu_t fn = (iFpppu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); }
 void iEpppL_32(x64emu_t *emu, uintptr_t fcn) { iEpppL_t fn = (iEpppL_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16))); emu->libc_err = errno; }
@@ -3351,8 +3365,10 @@ void uFEuip_32(x64emu_t *emu, uintptr_t fcn) { uFEuip_t fn = (uFEuip_t)fcn; R_EA
 void uFEpii_32(x64emu_t *emu, uintptr_t fcn) { uFEpii_t fn = (uFEpii_t)fcn; R_EAX = (uint32_t)fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); }
 void uFEpip_32(x64emu_t *emu, uintptr_t fcn) { uFEpip_t fn = (uFEpip_t)fcn; R_EAX = (uint32_t)fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); }
 void uFEpiV_32(x64emu_t *emu, uintptr_t fcn) { uFEpiV_t fn = (uFEpiV_t)fcn; R_EAX = (uint32_t)fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptrv(R_ESP + 12)); }
+void uFEpup_32(x64emu_t *emu, uintptr_t fcn) { uFEpup_t fn = (uFEpup_t)fcn; R_EAX = (uint32_t)fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); }
 void uFuuuu_32(x64emu_t *emu, uintptr_t fcn) { uFuuuu_t fn = (uFuuuu_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); }
 void uFuppd_32(x64emu_t *emu, uintptr_t fcn) { uFuppd_t fn = (uFuppd_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(double, R_ESP + 16)); }
+void uFpiip_32(x64emu_t *emu, uintptr_t fcn) { uFpiip_t fn = (uFpiip_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); }
 void uFpCCC_32(x64emu_t *emu, uintptr_t fcn) { uFpCCC_t fn = (uFpCCC_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptri(uint8_t, R_ESP + 8), from_ptri(uint8_t, R_ESP + 12), from_ptri(uint8_t, R_ESP + 16)); }
 void uFppii_32(x64emu_t *emu, uintptr_t fcn) { uFppii_t fn = (uFppii_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); }
 void uFppip_32(x64emu_t *emu, uintptr_t fcn) { uFppip_t fn = (uFppip_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); }
@@ -3690,6 +3706,7 @@ void iFpuppp_32(x64emu_t *emu, uintptr_t fcn) { iFpuppp_t fn = (iFpuppp_t)fcn; R
 void iFppiUi_32(x64emu_t *emu, uintptr_t fcn) { iFppiUi_t fn = (iFppiUi_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint64_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 24)); }
 void iFppipp_32(x64emu_t *emu, uintptr_t fcn) { iFppipp_t fn = (iFppipp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); }
 void iFppWup_32(x64emu_t *emu, uintptr_t fcn) { iFppWup_t fn = (iFppWup_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint16_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); }
+void iFppuip_32(x64emu_t *emu, uintptr_t fcn) { iFppuip_t fn = (iFppuip_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); }
 void iFppupu_32(x64emu_t *emu, uintptr_t fcn) { iFppupu_t fn = (iFppupu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(uint32_t, R_ESP + 20)); }
 void iFppLpL_32(x64emu_t *emu, uintptr_t fcn) { iFppLpL_t fn = (iFppLpL_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16), from_ulong(from_ptri(ulong_t, R_ESP + 20))); }
 void iFpppip_32(x64emu_t *emu, uintptr_t fcn) { iFpppip_t fn = (iFpppip_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); }
@@ -3968,6 +3985,7 @@ void iFXppppi_32(x64emu_t *emu, uintptr_t fcn) { iFXppppi_t fn = (iFXppppi_t)fcn
 void iFXppppp_32(x64emu_t *emu, uintptr_t fcn) { iFXppppp_t fn = (iFXppppp_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); }
 void uFEpippi_32(x64emu_t *emu, uintptr_t fcn) { uFEpippi_t fn = (uFEpippi_t)fcn; R_EAX = (uint32_t)fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); }
 void uFupuufp_32(x64emu_t *emu, uintptr_t fcn) { uFupuufp_t fn = (uFupuufp_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptriv(R_ESP + 24)); }
+void uFpppppp_32(x64emu_t *emu, uintptr_t fcn) { uFpppppp_t fn = (uFpppppp_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); }
 void lEipLipu_32(x64emu_t *emu, uintptr_t fcn) { lEipLipu_t fn = (lEipLipu_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(uint32_t, R_ESP + 24))); emu->libc_err = errno; }
 void lEipLipp_32(x64emu_t *emu, uintptr_t fcn) { lEipLipp_t fn = (lEipLipp_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24))); emu->libc_err = errno; }
 void pFEpiiuu_32(x64emu_t *emu, uintptr_t fcn) { pFEpiiuu_t fn = (pFEpiiuu_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20))); }
@@ -4091,6 +4109,7 @@ void vFXLLuuuu_32(x64emu_t *emu, uintptr_t fcn) { vFXLLuuuu_t fn = (vFXLLuuuu_t)
 void vFXLppipi_32(x64emu_t *emu, uintptr_t fcn) { vFXLppipi_t fn = (vFXLppipi_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); }
 void vFXpiipii_32(x64emu_t *emu, uintptr_t fcn) { vFXpiipii_t fn = (vFXpiipii_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); }
 void vFXppiiii_32(x64emu_t *emu, uintptr_t fcn) { vFXppiiii_t fn = (vFXppiiii_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); }
+void iFElppppp_32(x64emu_t *emu, uintptr_t fcn) { iFElppppp_t fn = (iFElppppp_t)fcn; R_EAX = fn(emu, from_long(from_ptri(long_t, R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); }
 void iEEpLiipp_32(x64emu_t *emu, uintptr_t fcn) { iEEpLiipp_t fn = (iEEpLiipp_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); emu->libc_err = errno; }
 void iEEpLiipV_32(x64emu_t *emu, uintptr_t fcn) { iEEpLiipV_t fn = (iEEpLiipV_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptrv(R_ESP + 24)); emu->libc_err = errno; }
 void iEEpLiLpV_32(x64emu_t *emu, uintptr_t fcn) { iEEpLiLpV_t fn = (iEEpLiLpV_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptriv(R_ESP + 20), from_ptrv(R_ESP + 24)); emu->libc_err = errno; }
@@ -4360,6 +4379,7 @@ void vFuddiiddiiddiip_32(x64emu_t *emu, uintptr_t fcn) { vFuddiiddiiddiip_t fn =
 void vFuiiiiiuiiiiilll_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiuiiiiilll_t fn = (vFuiiiiiuiiiiilll_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40), from_ptri(int32_t, R_ESP + 44), from_ptri(int32_t, R_ESP + 48), from_long(from_ptri(long_t, R_ESP + 52)), from_long(from_ptri(long_t, R_ESP + 56)), from_long(from_ptri(long_t, R_ESP + 60))); }
 void vFuuiiiiuuiiiiiii_32(x64emu_t *emu, uintptr_t fcn) { vFuuiiiiuuiiiiiii_t fn = (vFuuiiiiuuiiiiiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40), from_ptri(int32_t, R_ESP + 44), from_ptri(int32_t, R_ESP + 48), from_ptri(int32_t, R_ESP + 52), from_ptri(int32_t, R_ESP + 56), from_ptri(int32_t, R_ESP + 60)); }
 void vFfffffffffffffff_32(x64emu_t *emu, uintptr_t fcn) { vFfffffffffffffff_t fn = (vFfffffffffffffff_t)fcn; fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24), from_ptri(float, R_ESP + 28), from_ptri(float, R_ESP + 32), from_ptri(float, R_ESP + 36), from_ptri(float, R_ESP + 40), from_ptri(float, R_ESP + 44), from_ptri(float, R_ESP + 48), from_ptri(float, R_ESP + 52), from_ptri(float, R_ESP + 56), from_ptri(float, R_ESP + 60)); }
+void iFpppppppppppppppp_32(x64emu_t *emu, uintptr_t fcn) { iFpppppppppppppppp_t fn = (iFpppppppppppppppp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28), from_ptriv(R_ESP + 32), from_ptriv(R_ESP + 36), from_ptriv(R_ESP + 40), from_ptriv(R_ESP + 44), from_ptriv(R_ESP + 48), from_ptriv(R_ESP + 52), from_ptriv(R_ESP + 56), from_ptriv(R_ESP + 60), from_ptriv(R_ESP + 64)); }
 void vFuuuuiiiiuuiiiiiii_32(x64emu_t *emu, uintptr_t fcn) { vFuuuuiiiiuuiiiiiii_t fn = (vFuuuuiiiiuuiiiiiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36), from_ptri(uint32_t, R_ESP + 40), from_ptri(int32_t, R_ESP + 44), from_ptri(int32_t, R_ESP + 48), from_ptri(int32_t, R_ESP + 52), from_ptri(int32_t, R_ESP + 56), from_ptri(int32_t, R_ESP + 60), from_ptri(int32_t, R_ESP + 64), from_ptri(int32_t, R_ESP + 68)); }
 void vFXpuiiiiipuiiiiiiii_32(x64emu_t *emu, uintptr_t fcn) { vFXpuiiiiipuiiiiiiii_t fn = (vFXpuiiiiipuiiiiiiii_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptriv(R_ESP + 36), from_ptri(uint32_t, R_ESP + 40), from_ptri(int32_t, R_ESP + 44), from_ptri(int32_t, R_ESP + 48), from_ptri(int32_t, R_ESP + 52), from_ptri(int32_t, R_ESP + 56), from_ptri(int32_t, R_ESP + 60), from_ptri(int32_t, R_ESP + 64), from_ptri(int32_t, R_ESP + 68), from_ptri(int32_t, R_ESP + 72)); }
 void uFippuuuuiiiiuuiiiiiiiipp_32(x64emu_t *emu, uintptr_t fcn) { uFippuuuuiiiiuuiiiiiiiipp_t fn = (uFippuuuuiiiiuuiiiiiiiipp_t)fcn; R_EAX = (uint32_t)fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40), from_ptri(int32_t, R_ESP + 44), from_ptri(uint32_t, R_ESP + 48), from_ptri(uint32_t, R_ESP + 52), from_ptri(int32_t, R_ESP + 56), from_ptri(int32_t, R_ESP + 60), from_ptri(int32_t, R_ESP + 64), from_ptri(int32_t, R_ESP + 68), from_ptri(int32_t, R_ESP + 72), from_ptri(int32_t, R_ESP + 76), from_ptri(int32_t, R_ESP + 80), from_ptri(int32_t, R_ESP + 84), from_ptriv(R_ESP + 88), from_ptriv(R_ESP + 92)); }
diff --git a/src/wrapped32/generated/wrapper32.h b/src/wrapped32/generated/wrapper32.h
index c2fd363d..4fb245c9 100644
--- a/src/wrapped32/generated/wrapper32.h
+++ b/src/wrapped32/generated/wrapper32.h
@@ -704,6 +704,7 @@ void uFuuu_32(x64emu_t *emu, uintptr_t fnc);
 void uFuup_32(x64emu_t *emu, uintptr_t fnc);
 void uFupp_32(x64emu_t *emu, uintptr_t fnc);
 void uFpii_32(x64emu_t *emu, uintptr_t fnc);
+void uFpip_32(x64emu_t *emu, uintptr_t fnc);
 void uFpuU_32(x64emu_t *emu, uintptr_t fnc);
 void uEpup_32(x64emu_t *emu, uintptr_t fnc);
 void uFpup_32(x64emu_t *emu, uintptr_t fnc);
@@ -1031,6 +1032,7 @@ void iFEpip_32(x64emu_t *emu, uintptr_t fnc);
 void iFEpui_32(x64emu_t *emu, uintptr_t fnc);
 void iFEpuu_32(x64emu_t *emu, uintptr_t fnc);
 void iEEpup_32(x64emu_t *emu, uintptr_t fnc);
+void iFEpup_32(x64emu_t *emu, uintptr_t fnc);
 void iFEpll_32(x64emu_t *emu, uintptr_t fnc);
 void iEEpLi_32(x64emu_t *emu, uintptr_t fnc);
 void iFEpLi_32(x64emu_t *emu, uintptr_t fnc);
@@ -1084,6 +1086,7 @@ void iFpiip_32(x64emu_t *emu, uintptr_t fnc);
 void iFpiII_32(x64emu_t *emu, uintptr_t fnc);
 void iFpiuu_32(x64emu_t *emu, uintptr_t fnc);
 void iFpili_32(x64emu_t *emu, uintptr_t fnc);
+void iFpipu_32(x64emu_t *emu, uintptr_t fnc);
 void iFpipL_32(x64emu_t *emu, uintptr_t fnc);
 void iEpipp_32(x64emu_t *emu, uintptr_t fnc);
 void iFpipp_32(x64emu_t *emu, uintptr_t fnc);
@@ -1111,6 +1114,7 @@ void iFppup_32(x64emu_t *emu, uintptr_t fnc);
 void iFppLi_32(x64emu_t *emu, uintptr_t fnc);
 void iFppLI_32(x64emu_t *emu, uintptr_t fnc);
 void iFppLu_32(x64emu_t *emu, uintptr_t fnc);
+void iFppLp_32(x64emu_t *emu, uintptr_t fnc);
 void iFpppi_32(x64emu_t *emu, uintptr_t fnc);
 void iFpppu_32(x64emu_t *emu, uintptr_t fnc);
 void iEpppL_32(x64emu_t *emu, uintptr_t fnc);
@@ -1149,8 +1153,10 @@ void uFEuip_32(x64emu_t *emu, uintptr_t fnc);
 void uFEpii_32(x64emu_t *emu, uintptr_t fnc);
 void uFEpip_32(x64emu_t *emu, uintptr_t fnc);
 void uFEpiV_32(x64emu_t *emu, uintptr_t fnc);
+void uFEpup_32(x64emu_t *emu, uintptr_t fnc);
 void uFuuuu_32(x64emu_t *emu, uintptr_t fnc);
 void uFuppd_32(x64emu_t *emu, uintptr_t fnc);
+void uFpiip_32(x64emu_t *emu, uintptr_t fnc);
 void uFpCCC_32(x64emu_t *emu, uintptr_t fnc);
 void uFppii_32(x64emu_t *emu, uintptr_t fnc);
 void uFppip_32(x64emu_t *emu, uintptr_t fnc);
@@ -1488,6 +1494,7 @@ void iFpuppp_32(x64emu_t *emu, uintptr_t fnc);
 void iFppiUi_32(x64emu_t *emu, uintptr_t fnc);
 void iFppipp_32(x64emu_t *emu, uintptr_t fnc);
 void iFppWup_32(x64emu_t *emu, uintptr_t fnc);
+void iFppuip_32(x64emu_t *emu, uintptr_t fnc);
 void iFppupu_32(x64emu_t *emu, uintptr_t fnc);
 void iFppLpL_32(x64emu_t *emu, uintptr_t fnc);
 void iFpppip_32(x64emu_t *emu, uintptr_t fnc);
@@ -1766,6 +1773,7 @@ void iFXppppi_32(x64emu_t *emu, uintptr_t fnc);
 void iFXppppp_32(x64emu_t *emu, uintptr_t fnc);
 void uFEpippi_32(x64emu_t *emu, uintptr_t fnc);
 void uFupuufp_32(x64emu_t *emu, uintptr_t fnc);
+void uFpppppp_32(x64emu_t *emu, uintptr_t fnc);
 void lEipLipu_32(x64emu_t *emu, uintptr_t fnc);
 void lEipLipp_32(x64emu_t *emu, uintptr_t fnc);
 void pFEpiiuu_32(x64emu_t *emu, uintptr_t fnc);
@@ -1889,6 +1897,7 @@ void vFXLLuuuu_32(x64emu_t *emu, uintptr_t fnc);
 void vFXLppipi_32(x64emu_t *emu, uintptr_t fnc);
 void vFXpiipii_32(x64emu_t *emu, uintptr_t fnc);
 void vFXppiiii_32(x64emu_t *emu, uintptr_t fnc);
+void iFElppppp_32(x64emu_t *emu, uintptr_t fnc);
 void iEEpLiipp_32(x64emu_t *emu, uintptr_t fnc);
 void iEEpLiipV_32(x64emu_t *emu, uintptr_t fnc);
 void iEEpLiLpV_32(x64emu_t *emu, uintptr_t fnc);
@@ -2158,6 +2167,7 @@ void vFuddiiddiiddiip_32(x64emu_t *emu, uintptr_t fnc);
 void vFuiiiiiuiiiiilll_32(x64emu_t *emu, uintptr_t fnc);
 void vFuuiiiiuuiiiiiii_32(x64emu_t *emu, uintptr_t fnc);
 void vFfffffffffffffff_32(x64emu_t *emu, uintptr_t fnc);
+void iFpppppppppppppppp_32(x64emu_t *emu, uintptr_t fnc);
 void vFuuuuiiiiuuiiiiiii_32(x64emu_t *emu, uintptr_t fnc);
 void vFXpuiiiiipuiiiiiiii_32(x64emu_t *emu, uintptr_t fnc);
 void uFippuuuuiiiiuuiiiiiiiipp_32(x64emu_t *emu, uintptr_t fnc);
diff --git a/src/wrapped32/wrappedcurl.c b/src/wrapped32/wrappedcurl.c
new file mode 100644
index 00000000..8175d6f1
--- /dev/null
+++ b/src/wrapped32/wrappedcurl.c
@@ -0,0 +1,946 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#define _GNU_SOURCE         /* See feature_test_macros(7) */
+#include <dlfcn.h>
+
+#include "wrappedlibs.h"
+
+#include "wrapper32.h"
+#include "bridge.h"
+#include "librarian.h"
+#include "librarian/library_private.h"
+#include "x64emu.h"
+#include "debug.h"
+#include "box32context.h"
+#include "emu/x64emu_private.h"
+#include "callback.h"
+#include "elfloader.h"
+
+static const char* curlName = "libcurl.so.4";
+#define ALTNAME "libcurl.so"
+
+#define ALTNAME2 "libcurl-gnutls.so.4"
+#define LIBNAME curl
+
+#include "generated/wrappedcurltypes32.h"
+
+#include "wrappercallback32.h"
+
+#define LONG          0
+#define OBJECTPOINT   10000
+#define STRINGPOINT   10000
+#define FUNCTIONPOINT 20000
+#define OFF_T         30000
+#define BLOB          40000
+#define CINIT(name,type,number) CURLOPT_ ## name = type + number
+#define CURLOPT(na,t,nu) na = t + nu
+
+typedef enum {
+  CINIT(WRITEDATA, OBJECTPOINT, 1),
+  CINIT(URL, STRINGPOINT, 2),
+  CINIT(PORT, LONG, 3),
+  CINIT(PROXY, STRINGPOINT, 4),
+  CINIT(USERPWD, STRINGPOINT, 5),
+  CINIT(PROXYUSERPWD, STRINGPOINT, 6),
+  CINIT(RANGE, STRINGPOINT, 7),
+  CINIT(READDATA, OBJECTPOINT, 9),
+  CINIT(ERRORBUFFER, OBJECTPOINT, 10),
+  CINIT(WRITEFUNCTION, FUNCTIONPOINT, 11),
+  CINIT(READFUNCTION, FUNCTIONPOINT, 12),
+  CINIT(TIMEOUT, LONG, 13),
+  CINIT(INFILESIZE, LONG, 14),
+  CINIT(POSTFIELDS, OBJECTPOINT, 15),
+  CINIT(REFERER, STRINGPOINT, 16),
+  CINIT(FTPPORT, STRINGPOINT, 17),
+  CINIT(USERAGENT, STRINGPOINT, 18),
+  CINIT(LOW_SPEED_LIMIT, LONG, 19),
+  CINIT(LOW_SPEED_TIME, LONG, 20),
+  CINIT(RESUME_FROM, LONG, 21),
+  CINIT(COOKIE, STRINGPOINT, 22),
+  CINIT(HTTPHEADER, OBJECTPOINT, 23),
+  CINIT(HTTPPOST, OBJECTPOINT, 24),
+  CINIT(SSLCERT, STRINGPOINT, 25),
+  CINIT(KEYPASSWD, STRINGPOINT, 26),
+  CINIT(CRLF, LONG, 27),
+  CINIT(QUOTE, OBJECTPOINT, 28),
+  CINIT(HEADERDATA, OBJECTPOINT, 29),
+  CINIT(COOKIEFILE, STRINGPOINT, 31),
+  CINIT(SSLVERSION, LONG, 32),
+  CINIT(TIMECONDITION, LONG, 33),
+  CINIT(TIMEVALUE, LONG, 34),
+  CINIT(CUSTOMREQUEST, STRINGPOINT, 36),
+  CINIT(STDERR, OBJECTPOINT, 37),
+  CINIT(POSTQUOTE, OBJECTPOINT, 39),
+  CINIT(OBSOLETE40, OBJECTPOINT, 40),
+  CINIT(VERBOSE, LONG, 41),
+  CINIT(HEADER, LONG, 42),
+  CINIT(NOPROGRESS, LONG, 43),
+  CINIT(NOBODY, LONG, 44),
+  CINIT(FAILONERROR, LONG, 45),
+  CINIT(UPLOAD, LONG, 46),
+  CINIT(POST, LONG, 47),
+  CINIT(DIRLISTONLY, LONG, 48),
+  CINIT(APPEND, LONG, 50),
+  CINIT(NETRC, LONG, 51),
+  CINIT(FOLLOWLOCATION, LONG, 52),
+  CINIT(TRANSFERTEXT, LONG, 53),
+  CINIT(PUT, LONG, 54),
+  CINIT(PROGRESSFUNCTION, FUNCTIONPOINT, 56),
+  CINIT(PROGRESSDATA, OBJECTPOINT, 57),
+#define CURLOPT_XFERINFODATA CURLOPT_PROGRESSDATA
+  CINIT(AUTOREFERER, LONG, 58),
+  CINIT(PROXYPORT, LONG, 59),
+  CINIT(POSTFIELDSIZE, LONG, 60),
+  CINIT(HTTPPROXYTUNNEL, LONG, 61),
+  CINIT(INTERFACE, STRINGPOINT, 62),
+  CINIT(KRBLEVEL, STRINGPOINT, 63),
+  CINIT(SSL_VERIFYPEER, LONG, 64),
+  CINIT(CAINFO, STRINGPOINT, 65),
+  CINIT(MAXREDIRS, LONG, 68),
+  CINIT(FILETIME, LONG, 69),
+  CINIT(TELNETOPTIONS, OBJECTPOINT, 70),
+  CINIT(MAXCONNECTS, LONG, 71),
+  CINIT(OBSOLETE72, LONG, 72),
+  CINIT(FRESH_CONNECT, LONG, 74),
+  CINIT(FORBID_REUSE, LONG, 75),
+  CINIT(RANDOM_FILE, STRINGPOINT, 76),
+  CINIT(EGDSOCKET, STRINGPOINT, 77),
+  CINIT(CONNECTTIMEOUT, LONG, 78),
+  CINIT(HEADERFUNCTION, FUNCTIONPOINT, 79),
+  CINIT(HTTPGET, LONG, 80),
+  CINIT(SSL_VERIFYHOST, LONG, 81),
+  CINIT(COOKIEJAR, STRINGPOINT, 82),
+  CINIT(SSL_CIPHER_LIST, STRINGPOINT, 83),
+  CINIT(HTTP_VERSION, LONG, 84),
+  CINIT(FTP_USE_EPSV, LONG, 85),
+  CINIT(SSLCERTTYPE, STRINGPOINT, 86),
+  CINIT(SSLKEY, STRINGPOINT, 87),
+  CINIT(SSLKEYTYPE, STRINGPOINT, 88),
+  CINIT(SSLENGINE, STRINGPOINT, 89),
+  CINIT(SSLENGINE_DEFAULT, LONG, 90),
+  CINIT(DNS_USE_GLOBAL_CACHE, LONG, 91),
+  CINIT(DNS_CACHE_TIMEOUT, LONG, 92),
+  CINIT(PREQUOTE, OBJECTPOINT, 93),
+  CINIT(DEBUGFUNCTION, FUNCTIONPOINT, 94),
+  CINIT(DEBUGDATA, OBJECTPOINT, 95),
+  CINIT(COOKIESESSION, LONG, 96),
+  CINIT(CAPATH, STRINGPOINT, 97),
+  CINIT(BUFFERSIZE, LONG, 98),
+  CINIT(NOSIGNAL, LONG, 99),
+  CINIT(SHARE, OBJECTPOINT, 100),
+  CINIT(PROXYTYPE, LONG, 101),
+  CINIT(ACCEPT_ENCODING, STRINGPOINT, 102),
+  CINIT(PRIVATE, OBJECTPOINT, 103),
+  CINIT(HTTP200ALIASES, OBJECTPOINT, 104),
+  CINIT(UNRESTRICTED_AUTH, LONG, 105),
+  CINIT(FTP_USE_EPRT, LONG, 106),
+  CINIT(HTTPAUTH, LONG, 107),
+  CINIT(SSL_CTX_FUNCTION, FUNCTIONPOINT, 108),
+  CINIT(SSL_CTX_DATA, OBJECTPOINT, 109),
+  CINIT(FTP_CREATE_MISSING_DIRS, LONG, 110),
+  CINIT(PROXYAUTH, LONG, 111),
+  CINIT(FTP_RESPONSE_TIMEOUT, LONG, 112),
+#define CURLOPT_SERVER_RESPONSE_TIMEOUT CURLOPT_FTP_RESPONSE_TIMEOUT
+  CINIT(IPRESOLVE, LONG, 113),
+  CINIT(MAXFILESIZE, LONG, 114),
+  CINIT(INFILESIZE_LARGE, OFF_T, 115),
+  CINIT(RESUME_FROM_LARGE, OFF_T, 116),
+  CINIT(MAXFILESIZE_LARGE, OFF_T, 117),
+  CINIT(NETRC_FILE, STRINGPOINT, 118),
+  CINIT(USE_SSL, LONG, 119),
+  CINIT(POSTFIELDSIZE_LARGE, OFF_T, 120),
+  CINIT(TCP_NODELAY, LONG, 121),
+  CINIT(FTPSSLAUTH, LONG, 129),
+  CINIT(IOCTLFUNCTION, FUNCTIONPOINT, 130),
+  CINIT(IOCTLDATA, OBJECTPOINT, 131),
+  CINIT(FTP_ACCOUNT, STRINGPOINT, 134),
+  CINIT(COOKIELIST, STRINGPOINT, 135),
+  CINIT(IGNORE_CONTENT_LENGTH, LONG, 136),
+  CINIT(FTP_SKIP_PASV_IP, LONG, 137),
+  CINIT(FTP_FILEMETHOD, LONG, 138),
+  CINIT(LOCALPORT, LONG, 139),
+  CINIT(LOCALPORTRANGE, LONG, 140),
+  CINIT(CONNECT_ONLY, LONG, 141),
+  CINIT(CONV_FROM_NETWORK_FUNCTION, FUNCTIONPOINT, 142),
+  CINIT(CONV_TO_NETWORK_FUNCTION, FUNCTIONPOINT, 143),
+  CINIT(CONV_FROM_UTF8_FUNCTION, FUNCTIONPOINT, 144),
+  CINIT(MAX_SEND_SPEED_LARGE, OFF_T, 145),
+  CINIT(MAX_RECV_SPEED_LARGE, OFF_T, 146),
+  CINIT(FTP_ALTERNATIVE_TO_USER, STRINGPOINT, 147),
+  CINIT(SOCKOPTFUNCTION, FUNCTIONPOINT, 148),
+  CINIT(SOCKOPTDATA, OBJECTPOINT, 149),
+  CINIT(SSL_SESSIONID_CACHE, LONG, 150),
+  CINIT(SSH_AUTH_TYPES, LONG, 151),
+  CINIT(SSH_PUBLIC_KEYFILE, STRINGPOINT, 152),
+  CINIT(SSH_PRIVATE_KEYFILE, STRINGPOINT, 153),
+  CINIT(FTP_SSL_CCC, LONG, 154),
+  CINIT(TIMEOUT_MS, LONG, 155),
+  CINIT(CONNECTTIMEOUT_MS, LONG, 156),
+  CINIT(HTTP_TRANSFER_DECODING, LONG, 157),
+  CINIT(HTTP_CONTENT_DECODING, LONG, 158),
+  CINIT(NEW_FILE_PERMS, LONG, 159),
+  CINIT(NEW_DIRECTORY_PERMS, LONG, 160),
+  CINIT(POSTREDIR, LONG, 161),
+  CINIT(SSH_HOST_PUBLIC_KEY_MD5, STRINGPOINT, 162),
+  CINIT(OPENSOCKETFUNCTION, FUNCTIONPOINT, 163),
+  CINIT(OPENSOCKETDATA, OBJECTPOINT, 164),
+  CINIT(COPYPOSTFIELDS, OBJECTPOINT, 165),
+  CINIT(PROXY_TRANSFER_MODE, LONG, 166),
+  CINIT(SEEKFUNCTION, FUNCTIONPOINT, 167),
+  CINIT(SEEKDATA, OBJECTPOINT, 168),
+  CINIT(CRLFILE, STRINGPOINT, 169),
+  CINIT(ISSUERCERT, STRINGPOINT, 170),
+  CINIT(ADDRESS_SCOPE, LONG, 171),
+  CINIT(CERTINFO, LONG, 172),
+  CINIT(USERNAME, STRINGPOINT, 173),
+  CINIT(PASSWORD, STRINGPOINT, 174),
+  CINIT(PROXYUSERNAME, STRINGPOINT, 175),
+  CINIT(PROXYPASSWORD, STRINGPOINT, 176),
+  CINIT(NOPROXY, STRINGPOINT, 177),
+  CINIT(TFTP_BLKSIZE, LONG, 178),
+  CINIT(SOCKS5_GSSAPI_SERVICE, STRINGPOINT, 179),
+  CINIT(SOCKS5_GSSAPI_NEC, LONG, 180),
+  CINIT(PROTOCOLS, LONG, 181),
+  CINIT(REDIR_PROTOCOLS, LONG, 182),
+  CINIT(SSH_KNOWNHOSTS, STRINGPOINT, 183),
+  CINIT(SSH_KEYFUNCTION, FUNCTIONPOINT, 184),
+  CINIT(SSH_KEYDATA, OBJECTPOINT, 185),
+  CINIT(MAIL_FROM, STRINGPOINT, 186),
+  CINIT(MAIL_RCPT, OBJECTPOINT, 187),
+  CINIT(FTP_USE_PRET, LONG, 188),
+  CINIT(RTSP_REQUEST, LONG, 189),
+  CINIT(RTSP_SESSION_ID, STRINGPOINT, 190),
+  CINIT(RTSP_STREAM_URI, STRINGPOINT, 191),
+  CINIT(RTSP_TRANSPORT, STRINGPOINT, 192),
+  CINIT(RTSP_CLIENT_CSEQ, LONG, 193),
+  CINIT(RTSP_SERVER_CSEQ, LONG, 194),
+  CINIT(INTERLEAVEDATA, OBJECTPOINT, 195),
+  CINIT(INTERLEAVEFUNCTION, FUNCTIONPOINT, 196),
+  CINIT(WILDCARDMATCH, LONG, 197),
+  CINIT(CHUNK_BGN_FUNCTION, FUNCTIONPOINT, 198),
+  CINIT(CHUNK_END_FUNCTION, FUNCTIONPOINT, 199),
+  CINIT(FNMATCH_FUNCTION, FUNCTIONPOINT, 200),
+  CINIT(CHUNK_DATA, OBJECTPOINT, 201),
+  CINIT(FNMATCH_DATA, OBJECTPOINT, 202),
+  CINIT(RESOLVE, OBJECTPOINT, 203),
+  CINIT(TLSAUTH_USERNAME, STRINGPOINT, 204),
+  CINIT(TLSAUTH_PASSWORD, STRINGPOINT, 205),
+  CINIT(TLSAUTH_TYPE, STRINGPOINT, 206),
+  CINIT(TRANSFER_ENCODING, LONG, 207),
+  CINIT(CLOSESOCKETFUNCTION, FUNCTIONPOINT, 208),
+  CINIT(CLOSESOCKETDATA, OBJECTPOINT, 209),
+  CINIT(GSSAPI_DELEGATION, LONG, 210),
+  CINIT(DNS_SERVERS, STRINGPOINT, 211),
+  CINIT(ACCEPTTIMEOUT_MS, LONG, 212),
+  CINIT(TCP_KEEPALIVE, LONG, 213),
+  CINIT(TCP_KEEPIDLE, LONG, 214),
+  CINIT(TCP_KEEPINTVL, LONG, 215),
+  CINIT(SSL_OPTIONS, LONG, 216),
+  CINIT(MAIL_AUTH, STRINGPOINT, 217),
+  CINIT(SASL_IR, LONG, 218),
+  CINIT(XFERINFOFUNCTION, FUNCTIONPOINT, 219),
+  CINIT(XOAUTH2_BEARER, STRINGPOINT, 220),
+  CINIT(DNS_INTERFACE, STRINGPOINT, 221),
+  CINIT(DNS_LOCAL_IP4, STRINGPOINT, 222),
+  CINIT(DNS_LOCAL_IP6, STRINGPOINT, 223),
+  CINIT(LOGIN_OPTIONS, STRINGPOINT, 224),
+  CINIT(SSL_ENABLE_NPN, LONG, 225),
+  CINIT(SSL_ENABLE_ALPN, LONG, 226),
+  CINIT(EXPECT_100_TIMEOUT_MS, LONG, 227),
+  CINIT(PROXYHEADER, OBJECTPOINT, 228),
+  CINIT(HEADEROPT, LONG, 229),
+  CINIT(PINNEDPUBLICKEY, STRINGPOINT, 230),
+  CINIT(UNIX_SOCKET_PATH, STRINGPOINT, 231),
+  CINIT(SSL_VERIFYSTATUS, LONG, 232),
+  CINIT(SSL_FALSESTART, LONG, 233),
+  CINIT(PATH_AS_IS, LONG, 234),
+  CINIT(PROXY_SERVICE_NAME, STRINGPOINT, 235),
+  CINIT(SERVICE_NAME, STRINGPOINT, 236),
+  CINIT(PIPEWAIT, LONG, 237),
+  CINIT(DEFAULT_PROTOCOL, STRINGPOINT, 238),
+  CINIT(STREAM_WEIGHT, LONG, 239),
+  CINIT(STREAM_DEPENDS, OBJECTPOINT, 240),
+  CINIT(STREAM_DEPENDS_E, OBJECTPOINT, 241),
+  CINIT(TFTP_NO_OPTIONS, LONG, 242),
+  CINIT(CONNECT_TO, OBJECTPOINT, 243),
+  CINIT(TCP_FASTOPEN, LONG, 244),
+  CINIT(KEEP_SENDING_ON_ERROR, LONG, 245),
+  CINIT(PROXY_CAINFO, STRINGPOINT, 246),
+  CINIT(PROXY_CAPATH, STRINGPOINT, 247),
+  CINIT(PROXY_SSL_VERIFYPEER, LONG, 248),
+  CINIT(PROXY_SSL_VERIFYHOST, LONG, 249),
+  CINIT(PROXY_SSLVERSION, LONG, 250),
+  CINIT(PROXY_TLSAUTH_USERNAME, STRINGPOINT, 251),
+  CINIT(PROXY_TLSAUTH_PASSWORD, STRINGPOINT, 252),
+  CINIT(PROXY_TLSAUTH_TYPE, STRINGPOINT, 253),
+  CINIT(PROXY_SSLCERT, STRINGPOINT, 254),
+  CINIT(PROXY_SSLCERTTYPE, STRINGPOINT, 255),
+  CINIT(PROXY_SSLKEY, STRINGPOINT, 256),
+  CINIT(PROXY_SSLKEYTYPE, STRINGPOINT, 257),
+  CINIT(PROXY_KEYPASSWD, STRINGPOINT, 258),
+  CINIT(PROXY_SSL_CIPHER_LIST, STRINGPOINT, 259),
+  CINIT(PROXY_CRLFILE, STRINGPOINT, 260),
+  CINIT(PROXY_SSL_OPTIONS, LONG, 261),
+  CINIT(PRE_PROXY, STRINGPOINT, 262),
+  CINIT(PROXY_PINNEDPUBLICKEY, STRINGPOINT, 263),
+  CINIT(ABSTRACT_UNIX_SOCKET, STRINGPOINT, 264),
+  CINIT(SUPPRESS_CONNECT_HEADERS, LONG, 265),
+  CINIT(REQUEST_TARGET, STRINGPOINT, 266),
+  CINIT(SOCKS5_AUTH, LONG, 267),
+  CINIT(SSH_COMPRESSION, LONG, 268),
+  CINIT(MIMEPOST, OBJECTPOINT, 269),
+  CINIT(TIMEVALUE_LARGE, OFF_T, 270),
+  CINIT(HAPPY_EYEBALLS_TIMEOUT_MS, LONG, 271),
+  CINIT(RESOLVER_START_FUNCTION, FUNCTIONPOINT, 272),
+  CINIT(RESOLVER_START_DATA, OBJECTPOINT, 273),
+  CINIT(HAPROXYPROTOCOL, LONG, 274),
+  CINIT(DNS_SHUFFLE_ADDRESSES, LONG, 275),
+  CINIT(TLS13_CIPHERS, STRINGPOINT, 276),
+  CINIT(PROXY_TLS13_CIPHERS, STRINGPOINT, 277),
+  CINIT(DISALLOW_USERNAME_IN_URL, LONG, 278),
+  CINIT(DOH_URL, STRINGPOINT, 279),
+  CINIT(UPLOAD_BUFFERSIZE, LONG, 280),
+  CINIT(UPKEEP_INTERVAL_MS, LONG, 281),
+  CINIT(CURLU, OBJECTPOINT, 282),
+  CINIT(TRAILERFUNCTION, FUNCTIONPOINT, 283),
+  CINIT(TRAILERDATA, OBJECTPOINT, 284),
+  CINIT(HTTP09_ALLOWED, LONG, 285),
+  CINIT(ALTSVC_CTRL, LONG, 286),
+  CINIT(ALTSVC, STRINGPOINT, 287),
+  CINIT(MAXAGE_CONN, LONG, 288),
+  CINIT(SASL_AUTHZID, STRINGPOINT, 289),
+  CINIT(MAIL_RCPT_ALLOWFAILS, LONG, 290),
+  CINIT(SSLCERT_BLOB, BLOB, 291),
+  CINIT(SSLKEY_BLOB, BLOB, 292),
+  CINIT(PROXY_SSLCERT_BLOB, BLOB, 293),
+  CINIT(PROXY_SSLKEY_BLOB, BLOB, 294),
+  CINIT(ISSUERCERT_BLOB, BLOB, 295),
+  CINIT(PROXY_ISSUERCERT, STRINGPOINT, 296),
+  CINIT(PROXY_ISSUERCERT_BLOB, BLOB, 297),
+  CINIT(SSL_EC_CURVES, STRINGPOINT, 298),
+  CINIT(HSTS_CTRL, LONG, 299),
+  CINIT(HSTS, STRINGPOINT, 300),
+  CINIT(HSTSREADFUNCTION, FUNCTIONPOINT, 301),
+  CINIT(HSTSREADDATA, OBJECTPOINT, 302),
+  CINIT(HSTSWRITEFUNCTION, FUNCTIONPOINT, 303),
+  CINIT(HSTSWRITEDATA, OBJECTPOINT, 304),
+  CINIT(AWS_SIGV4, STRINGPOINT, 305),
+  CINIT(DOH_SSL_VERIFYPEER, LONG, 306),
+  CINIT(DOH_SSL_VERIFYHOST, LONG, 307),
+  CINIT(DOH_SSL_VERIFYSTATUS, LONG, 308),
+  CINIT(CAINFO_BLOB, BLOB, 309),
+  CINIT(PROXY_CAINFO_BLOB, BLOB, 310),
+  CINIT(SSH_HOST_PUBLIC_KEY_SHA256, STRINGPOINT, 311),
+  CINIT(PREREQFUNCTION, FUNCTIONPOINT, 312),
+  CINIT(PREREQDATA, OBJECTPOINT, 313),
+  CINIT(MAXLIFETIME_CONN, LONG, 314),
+  CINIT(MIME_OPTIONS, LONG, 315),
+  CINIT(SSH_HOSTKEYFUNCTION, FUNCTIONPOINT, 316),
+  CINIT(SSH_HOSTKEYDATA, OBJECTPOINT, 317),
+  CINIT(PROTOCOLS_STR, STRINGPOINT, 318),
+  CINIT(REDIR_PROTOCOLS_STR, STRINGPOINT, 319),
+  CINIT(WS_OPTIONS, LONG, 320),
+  CINIT(CA_CACHE_TIMEOUT, LONG, 321),
+  CINIT(QUICK_EXIT, LONG, 322),
+  CINIT(HAPROXY_CLIENT_IP, STRINGPOINT, 323),
+  CINIT(SERVER_RESPONSE_TIMEOUT_MS, LONG, 324),
+  CURLOPT_LASTENTRY /* the last unused */
+} CURLoption;
+
+typedef enum {
+  CURLOPT(CURLMOPT_SOCKETFUNCTION, FUNCTIONPOINT, 1),
+  CURLOPT(CURLMOPT_SOCKETDATA, OBJECTPOINT, 2),
+  CURLOPT(CURLMOPT_PIPELINING, LONG, 3),
+  CURLOPT(CURLMOPT_TIMERFUNCTION, FUNCTIONPOINT, 4),
+  CURLOPT(CURLMOPT_TIMERDATA, OBJECTPOINT, 5),
+  CURLOPT(CURLMOPT_MAXCONNECTS, LONG, 6),
+  CURLOPT(CURLMOPT_MAX_HOST_CONNECTIONS, LONG, 7),
+  CURLOPT(CURLMOPT_MAX_PIPELINE_LENGTH, LONG, 8),
+  CURLOPT(CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, OFF_T, 9),
+  CURLOPT(CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, OFF_T, 10),
+  CURLOPT(CURLMOPT_PIPELINING_SITE_BL, OBJECTPOINT, 11),
+  CURLOPT(CURLMOPT_PIPELINING_SERVER_BL, OBJECTPOINT, 12),
+  CURLOPT(CURLMOPT_MAX_TOTAL_CONNECTIONS, LONG, 13),
+  CURLOPT(CURLMOPT_PUSHFUNCTION, FUNCTIONPOINT, 14),
+  CURLOPT(CURLMOPT_PUSHDATA, OBJECTPOINT, 15),
+  CURLOPT(CURLMOPT_MAX_CONCURRENT_STREAMS, LONG, 16),
+  CURLMOPT_LASTENTRY /* the last unused */
+} CURLMoption;
+
+typedef enum {
+  CURLSHOPT_NONE,
+  CURLSHOPT_SHARE,
+  CURLSHOPT_UNSHARE,
+  CURLSHOPT_LOCKFUNC,
+  CURLSHOPT_UNLOCKFUNC,
+  CURLSHOPT_USERDATA,
+  CURLSHOPT_LAST  /* never use */
+} CURLSHoption;
+
+
+#undef LONG
+#undef OBJECTPOINT
+#undef STRINGPOINT
+#undef FUNCTIONPOINT
+#undef OFF_T
+#undef CURLOPT
+#undef CINIT
+
+#define SUPER() \
+    GO(0)   \
+    GO(1)   \
+    GO(2)   \
+    GO(3)
+
+// write
+#define GO(A)   \
+static uintptr_t my_write_fct_##A = 0;   \
+static size_t my_write_##A(char* ptr, size_t size, size_t nmemb, void* userdata)     \
+{                                       \
+    return (size_t)RunFunctionFmt(my_write_fct_##A, "pLLp", ptr, size, nmemb, userdata);\
+}
+SUPER()
+#undef GO
+static void* find_write_Fct(void* fct)
+{
+    if(!fct) return NULL;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_write_fct_##A == (uintptr_t)fct) return my_write_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_write_fct_##A == 0) {my_write_fct_##A = (uintptr_t)fct; return my_write_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for curl write callback\n");
+    return NULL;
+}
+
+// read
+#define GO(A)   \
+static uintptr_t my_read_fct_##A = 0;   \
+static size_t my_read_##A(char* buffer, size_t size, size_t nitems, void* userdata)     \
+{                                       \
+    return (size_t)RunFunctionFmt(my_read_fct_##A, "pLLp", buffer, size, nitems, userdata);\
+}
+SUPER()
+#undef GO
+static void* find_read_Fct(void* fct)
+{
+    if(!fct) return NULL;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_read_fct_##A == (uintptr_t)fct) return my_read_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_read_fct_##A == 0) {my_read_fct_##A = (uintptr_t)fct; return my_read_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for curl read callback\n");
+    return NULL;
+}
+
+// ioctl
+#define GO(A)   \
+static uintptr_t my_ioctl_fct_##A = 0;   \
+static size_t my_ioctl_##A(void* handle, int32_t fnc, void* userdata)     \
+{                                       \
+    return (size_t)RunFunctionFmt(my_ioctl_fct_##A, "pip", handle, fnc, userdata);\
+}
+SUPER()
+#undef GO
+static void* find_ioctl_Fct(void* fct)
+{
+    if(!fct) return NULL;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_ioctl_fct_##A == (uintptr_t)fct) return my_ioctl_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_ioctl_fct_##A == 0) {my_ioctl_fct_##A = (uintptr_t)fct; return my_ioctl_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for curl ioctl callback\n");
+    return NULL;
+}
+
+// seek
+#define GO(A)   \
+static uintptr_t my_seek_fct_##A = 0;   \
+static int32_t my_seek_##A(void* userdata, int64_t off, int32_t origin)     \
+{                                       \
+    return (int32_t)RunFunctionFmt(my_seek_fct_##A, "pIi", userdata, off, origin);\
+}
+SUPER()
+#undef GO
+static void* find_seek_Fct(void* fct)
+{
+    if(!fct) return NULL;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_seek_fct_##A == (uintptr_t)fct) return my_seek_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_seek_fct_##A == 0) {my_seek_fct_##A = (uintptr_t)fct; return my_seek_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for curl seek callback\n");
+    return NULL;
+}
+
+// header
+#define GO(A)   \
+static uintptr_t my_header_fct_##A = 0;   \
+static size_t my_header_##A(char* buffer, size_t size, size_t nitems, void* userdata)     \
+{                                       \
+    return (size_t)RunFunctionFmt(my_header_fct_##A, "pLLp", buffer, size, nitems, userdata);\
+}
+SUPER()
+#undef GO
+static void* find_header_Fct(void* fct)
+{
+    if(!fct) return NULL;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_header_fct_##A == (uintptr_t)fct) return my_header_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_header_fct_##A == 0) {my_header_fct_##A = (uintptr_t)fct; return my_header_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for curl header callback\n");
+    return NULL;
+}
+
+// progress
+#define GO(A)   \
+static uintptr_t my_progress_fct_##A = 0;   \
+static int my_progress_##A(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow)     \
+{                                       \
+    return (int)RunFunctionFmt(my_progress_fct_##A, "pdddd", clientp, dltotal, dlnow, ultotal, ulnow);\
+}
+SUPER()
+#undef GO
+static void* find_progress_Fct(void* fct)
+{
+    if(!fct) return NULL;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_progress_fct_##A == (uintptr_t)fct) return my_progress_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_progress_fct_##A == 0) {my_progress_fct_##A = (uintptr_t)fct; return my_progress_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for curl progress callback\n");
+    return NULL;
+}
+
+// progress_int
+#define GO(A)   \
+static uintptr_t my_progress_int_fct_##A = 0;   \
+static int my_progress_int_##A(void *clientp, uint64_t dltotal, uint64_t dlnow, uint64_t ultotal, uint64_t ulnow)     \
+{                                       \
+    return (int)RunFunctionFmt(my_progress_int_fct_##A, "pUUUU", clientp, dltotal, dlnow, ultotal, ulnow);\
+}
+SUPER()
+#undef GO
+static void* find_progress_int_Fct(void* fct)
+{
+    if(!fct) return NULL;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_progress_int_fct_##A == (uintptr_t)fct) return my_progress_int_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_progress_int_fct_##A == 0) {my_progress_int_fct_##A = (uintptr_t)fct; return my_progress_int_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for curl progress_int callback\n");
+    return NULL;
+}
+
+// socket
+#define GO(A)   \
+static uintptr_t my_socket_fct_##A = 0;                                         \
+static int my_socket_##A(void *a, int b, int c, void* d, void* e)               \
+{                                                                               \
+    return (int)RunFunctionFmt(my_socket_fct_##A, "piipp", a, b, c, d, e);   \
+}
+SUPER()
+#undef GO
+static void* find_socket_Fct(void* fct)
+{
+    if(!fct) return NULL;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_socket_fct_##A == (uintptr_t)fct) return my_socket_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_socket_fct_##A == 0) {my_socket_fct_##A = (uintptr_t)fct; return my_socket_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for curl socket callback\n");
+    return NULL;
+}
+
+// timer
+#define GO(A)   \
+static uintptr_t my_timer_fct_##A = 0;                                  \
+static int my_timer_##A(void *a, long b, void* c)                       \
+{                                                                       \
+    return (int)RunFunctionFmt(my_timer_fct_##A, "plp", a, b, c);  \
+}
+SUPER()
+#undef GO
+static void* find_timer_Fct(void* fct)
+{
+    if(!fct) return NULL;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_timer_fct_##A == (uintptr_t)fct) return my_timer_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_timer_fct_##A == 0) {my_timer_fct_##A = (uintptr_t)fct; return my_timer_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for curl timer callback\n");
+    return NULL;
+}
+
+// push
+#define GO(A)   \
+static uintptr_t my_push_fct_##A = 0;                                       \
+static int my_push_##A(void *a, void* b, size_t c, void* d, void* e)        \
+{                                                                           \
+    return (int)RunFunctionFmt(my_push_fct_##A, "ppLpp", a, b, c, d, e); \
+}
+SUPER()
+#undef GO
+static void* find_push_Fct(void* fct)
+{
+    if(!fct) return NULL;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_push_fct_##A == (uintptr_t)fct) return my_push_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_push_fct_##A == 0) {my_push_fct_##A = (uintptr_t)fct; return my_push_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for curl push callback\n");
+    return NULL;
+}
+
+// debug
+#define GO(A)   \
+static uintptr_t my_debug_fct_##A = 0;                                          \
+static int my_debug_##A(void *a, int b, void* c, size_t d, void* e)             \
+{                                                                               \
+    return (int)RunFunctionFmt(my_debug_fct_##A, "pipLp", a, b, c, d, e);    \
+}
+SUPER()
+#undef GO
+static void* find_debug_Fct(void* fct)
+{
+    if(!fct) return NULL;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_debug_fct_##A == (uintptr_t)fct) return my_debug_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_debug_fct_##A == 0) {my_debug_fct_##A = (uintptr_t)fct; return my_debug_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for curl debug callback\n");
+    return NULL;
+}
+
+// lockcb
+#define GO(A)   \
+static uintptr_t my_lockcb_fct_##A = 0;                     \
+static void my_lockcb_##A(void *a, int b, int c, void* d)   \
+{                                                           \
+    RunFunctionFmt(my_lockcb_fct_##A, "piip", a, b, c, d);  \
+}
+SUPER()
+#undef GO
+static void* find_lockcb_Fct(void* fct)
+{
+    if(!fct) return NULL;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_lockcb_fct_##A == (uintptr_t)fct) return my_lockcb_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_lockcb_fct_##A == 0) {my_lockcb_fct_##A = (uintptr_t)fct; return my_lockcb_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for curl lockcb callback\n");
+    return NULL;
+}
+
+// unlockcb
+#define GO(A)   \
+static uintptr_t my_unlockcb_fct_##A = 0;                   \
+static void my_unlockcb_##A(void *a, int b, void* c)        \
+{                                                           \
+    RunFunctionFmt(my_unlockcb_fct_##A, "pip", a, b, c);    \
+}
+SUPER()
+#undef GO
+static void* find_unlockcb_Fct(void* fct)
+{
+    if(!fct) return NULL;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_unlockcb_fct_##A == (uintptr_t)fct) return my_unlockcb_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_unlockcb_fct_##A == 0) {my_unlockcb_fct_##A = (uintptr_t)fct; return my_unlockcb_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for curl unlockcb callback\n");
+    return NULL;
+}
+
+// ssl_ctx_callback
+#define GO(A)   \
+static uintptr_t my_ssl_ctx_callback_fct_##A = 0;                               \
+static int my_ssl_ctx_callback_##A(void *a, void* b, void* c)                   \
+{                                                                               \
+    return (int)RunFunctionFmt(my_ssl_ctx_callback_fct_##A, "ppp", a, b, c);    \
+}
+SUPER()
+#undef GO
+static void* find_ssl_ctx_callback_Fct(void* fct)
+{
+    if(!fct) return NULL;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_ssl_ctx_callback_fct_##A == (uintptr_t)fct) return my_ssl_ctx_callback_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_ssl_ctx_callback_fct_##A == 0) {my_ssl_ctx_callback_fct_##A = (uintptr_t)fct; return my_ssl_ctx_callback_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for curl ssl_ctx_callback callback\n");
+    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 my32_curl_easy_setopt(x64emu_t* emu, void* handle, uint32_t option, void* param)
+{
+    (void)emu;
+
+    switch(option) {
+        case CURLOPT_WRITEFUNCTION:
+            return my->curl_easy_setopt(handle, option, find_write_Fct(param));
+        case CURLOPT_READFUNCTION:
+            return my->curl_easy_setopt(handle, option, find_read_Fct(param));
+        case CURLOPT_IOCTLFUNCTION:
+            return my->curl_easy_setopt(handle, option, find_ioctl_Fct(param));
+        case CURLOPT_SEEKFUNCTION:
+            return my->curl_easy_setopt(handle, option, find_seek_Fct(param));
+        case CURLOPT_HEADERFUNCTION:
+            return my->curl_easy_setopt(handle, option, find_header_Fct(param));
+        case CURLOPT_PROGRESSFUNCTION:
+            return my->curl_easy_setopt(handle, option, find_progress_Fct(param));
+        case CURLOPT_XFERINFOFUNCTION:
+            return my->curl_easy_setopt(handle, option, find_progress_int_Fct(param));
+        case CURLOPT_DEBUGFUNCTION:
+            return my->curl_easy_setopt(handle, option, find_debug_Fct(param));
+        case CURLOPT_SSL_CTX_FUNCTION:
+            return my->curl_easy_setopt(handle, option, find_ssl_ctx_callback_Fct(param));
+        case CURLOPT_SSL_CTX_DATA:
+            return my->curl_easy_setopt(handle, option, param);
+        case CURLOPT_SOCKOPTFUNCTION:
+        case CURLOPT_OPENSOCKETFUNCTION:
+        case CURLOPT_CLOSESOCKETFUNCTION:
+        case CURLOPT_CONV_TO_NETWORK_FUNCTION:
+        case CURLOPT_CONV_FROM_NETWORK_FUNCTION:
+        case CURLOPT_CONV_FROM_UTF8_FUNCTION:
+        case CURLOPT_INTERLEAVEFUNCTION:
+        case CURLOPT_CHUNK_BGN_FUNCTION:
+        case CURLOPT_CHUNK_END_FUNCTION:
+        case CURLOPT_FNMATCH_FUNCTION:
+        case CURLOPT_RESOLVER_START_FUNCTION:
+        case CURLOPT_TRAILERFUNCTION:
+        case CURLOPT_HSTSREADFUNCTION:
+        case CURLOPT_HSTSWRITEFUNCTION:
+        case CURLOPT_PREREQFUNCTION:
+        case CURLOPT_SSH_HOSTKEYFUNCTION:
+            printf_log(LOG_NONE, "Error: unimplemented option %u in curl_easy_setopt\n", option);
+            return 48; //unknown option...
+        default:
+            return my->curl_easy_setopt(handle, option, param);
+    }
+}
+
+EXPORT uint32_t my32_curl_multi_setopt(x64emu_t* emu, void* handle, uint32_t option, void* param)
+{
+    (void)emu;
+
+    switch(option) {
+        case CURLMOPT_SOCKETFUNCTION:
+            return my->curl_multi_setopt(handle, option, find_socket_Fct(param));
+        case CURLMOPT_TIMERFUNCTION:
+            return my->curl_multi_setopt(handle, option, find_timer_Fct(param));
+        case CURLMOPT_PUSHFUNCTION:
+            return my->curl_multi_setopt(handle, option, find_push_Fct(param));
+        default:
+            return my->curl_multi_setopt(handle, option, param);
+    }
+}
+
+EXPORT uint32_t my32_curl_share_setopt(x64emu_t* emu, void* handle, CURLSHoption option, void* param)
+{
+    switch(option) {
+        case CURLSHOPT_LOCKFUNC:
+            return my->curl_share_setopt(handle, option, find_lockcb_Fct(param));
+        case CURLSHOPT_UNLOCKFUNC:
+            return my->curl_share_setopt(handle, option, find_unlockcb_Fct(param));
+        default:
+            return my->curl_share_setopt(handle, option, param);
+    }
+}
+
+EXPORT int my32_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_init32.h"
diff --git a/src/wrapped32/wrappedcurl_private.h b/src/wrapped32/wrappedcurl_private.h
new file mode 100644
index 00000000..ce198abe
--- /dev/null
+++ b/src/wrapped32/wrappedcurl_private.h
@@ -0,0 +1,85 @@
+#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA))
+#error Meh....
+#endif
+
+GO(curl_easy_cleanup, vFp)
+GO(curl_easy_duphandle, pFp)
+GO(curl_easy_escape, pFppi)
+GO(curl_easy_getinfo, uFpppppp) //vararg
+GO(curl_easy_init, pFv)
+//GO(curl_easy_pause, 
+GO(curl_easy_perform, uFp)
+GO(curl_easy_recv, iFppLp)
+GO(curl_easy_reset, vFp)
+GO(curl_easy_send, iFppLp)
+GOM(curl_easy_setopt, uFEpup)   // can set many callbacks!
+GO(curl_easy_strerror, pFu)
+//GO(curl_easy_unescape, 
+//GO(curl_escape, 
+GO(curl_formadd, iFpppppppppppppppp)    // there is a vararg here. Should GOM and use CURLFORM_ARRAY instead
+GO(curl_formfree, vFp)
+//GO(curl_formget, 
+GO(curl_free, vFp)
+//GO(curl_getdate, 
+//GO(curl_getenv, 
+GO(curl_global_cleanup, vFv)
+GO(curl_global_init, uFu)
+GOM(curl_global_init_mem, iFElppppp)
+GO(curl_global_sslset, uFupp)
+// 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, 
+//GO(curl_msnprintf, 
+//GO(curl_msprintf, 
+GO(curl_multi_add_handle, uFpp)
+GO(curl_multi_assign, uFpip)
+GO(curl_multi_cleanup, uFp)
+GO(curl_multi_fdset, uFppppp)
+GO(curl_multi_info_read, pFpp)
+GO(curl_multi_init, pFv)
+GO(curl_multi_perform, uFpp)
+GO(curl_multi_poll, iFppuip)    // since 7.66.0
+GO(curl_multi_remove_handle, uFpp)
+GOM(curl_multi_setopt, iFEpup)
+//GO(curl_multi_socket, 
+GO(curl_multi_socket_action, uFpiip)
+//GO(curl_multi_socket_all, 
+GO(curl_multi_strerror, pFi)
+GO(curl_multi_timeout, iFpp)
+GO(curl_multi_wait, iFppuip)
+//GO(curl_mvaprintf, 
+//GO(curl_mvfprintf, 
+//GO(curl_mvprintf, 
+//GO(curl_mvsnprintf, 
+//GO(curl_mvsprintf, 
+//GO(curl_pushheader_byname, 
+//GO(curl_pushheader_bynum, 
+GO(curl_share_cleanup, uFp)
+GO(curl_share_init, pFv)
+GOM(curl_share_setopt, uFEpup)
+//GO(curl_share_strerror, 
+GO(curl_slist_append, pFpp)
+GO(curl_slist_free_all, vFp)
+//GO(curl_strequal, 
+//GO(curl_strnequal, 
+//GO(curl_unescape, 
+GO(curl_url, pFv)
+GO(curl_url_cleanup, vFp)
+GO(curl_url_dup, pFp)
+GO(curl_url_get, iFpipu)
+GO(curl_url_set, iFpipu)
+GO(curl_url_strerror, pFi)
+GO(curl_version, pFv)
+GO(curl_version_info, pFi)