diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-03-19 17:36:46 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-03-19 17:36:46 +0100 |
| commit | 27b6715910175071f27d05937bc0e1f310b8acfd (patch) | |
| tree | 330190ec40eb70e8f7560744878757a76c99761b /src | |
| parent | b8ef8565e8bd5d56acc838478debb17958e4b34f (diff) | |
| download | box64-27b6715910175071f27d05937bc0e1f310b8acfd.tar.gz box64-27b6715910175071f27d05937bc0e1f310b8acfd.zip | |
Added 2 more libcups wrapped functions (for Heroic)
Diffstat (limited to 'src')
| -rw-r--r-- | src/wrapped/generated/functions_list.txt | 3 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedlibcupstypes.h | 4 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.c | 2 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.h | 1 | ||||
| -rwxr-xr-x | src/wrapped/wrappedlibcups.c | 49 | ||||
| -rwxr-xr-x | src/wrapped/wrappedlibcups_private.h | 6 |
6 files changed, 61 insertions, 4 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt index 6179cf50..165b3900 100644 --- a/src/wrapped/generated/functions_list.txt +++ b/src/wrapped/generated/functions_list.txt @@ -1989,6 +1989,7 @@ #() vFppppiipi #() vFpppppuuu #() vFpppppppp +#() iFEuipuupp #() iFEpippppp #() iFEpuuLppp #() iFEpUUuppp @@ -3359,6 +3360,8 @@ wrappedlibc: - clone wrappedlibcrypt: wrappedlibcups: +- iFuipuupp: + - cupsEnumDests wrappedlibdl: - iFp: - dlclose diff --git a/src/wrapped/generated/wrappedlibcupstypes.h b/src/wrapped/generated/wrappedlibcupstypes.h index c71d9118..152cc8c0 100644 --- a/src/wrapped/generated/wrappedlibcupstypes.h +++ b/src/wrapped/generated/wrappedlibcupstypes.h @@ -11,7 +11,9 @@ #define ADDED_FUNCTIONS() #endif +typedef int32_t (*iFuipuupp_t)(uint32_t, int32_t, void*, uint32_t, uint32_t, void*, void*); -#define SUPER() ADDED_FUNCTIONS() +#define SUPER() ADDED_FUNCTIONS() \ + GO(cupsEnumDests, iFuipuupp_t) #endif // __wrappedlibcupsTYPES_H_ diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c index 747f6237..6b12efa8 100644 --- a/src/wrapped/generated/wrapper.c +++ b/src/wrapped/generated/wrapper.c @@ -2023,6 +2023,7 @@ typedef void (*vFpplppppp_t)(void*, void*, intptr_t, void*, void*, void*, void*, typedef void (*vFppppiipi_t)(void*, void*, void*, void*, int32_t, int32_t, void*, int32_t); typedef void (*vFpppppuuu_t)(void*, void*, void*, void*, void*, uint32_t, uint32_t, uint32_t); typedef void (*vFpppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*); +typedef int32_t (*iFEuipuupp_t)(x64emu_t*, uint32_t, int32_t, void*, uint32_t, uint32_t, void*, void*); typedef int32_t (*iFEpippppp_t)(x64emu_t*, void*, int32_t, void*, void*, void*, void*, void*); typedef int32_t (*iFEpuuLppp_t)(x64emu_t*, void*, uint32_t, uint32_t, uintptr_t, void*, void*, void*); typedef int32_t (*iFEpUUuppp_t)(x64emu_t*, void*, uint64_t, uint64_t, uint32_t, void*, void*, void*); @@ -4400,6 +4401,7 @@ void vFpplppppp(x64emu_t *emu, uintptr_t fcn) { vFpplppppp_t fn = (vFpplppppp_t) void vFppppiipi(x64emu_t *emu, uintptr_t fcn) { vFppppiipi_t fn = (vFppppiipi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } void vFpppppuuu(x64emu_t *emu, uintptr_t fcn) { vFpppppuuu_t fn = (vFpppppuuu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } void vFpppppppp(x64emu_t *emu, uintptr_t fcn) { vFpppppppp_t fn = (vFpppppppp_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**)(R_RSP + 16)); } +void iFEuipuupp(x64emu_t *emu, uintptr_t fcn) { iFEuipuupp_t fn = (iFEuipuupp_t)fcn; R_RAX=(int32_t)fn(emu, (uint32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void iFEpippppp(x64emu_t *emu, uintptr_t fcn) { iFEpippppp_t fn = (iFEpippppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void iFEpuuLppp(x64emu_t *emu, uintptr_t fcn) { iFEpuuLppp_t fn = (iFEpuuLppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void iFEpUUuppp(x64emu_t *emu, uintptr_t fcn) { iFEpUUuppp_t fn = (iFEpUUuppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h index 790b8224..75ae7fef 100644 --- a/src/wrapped/generated/wrapper.h +++ b/src/wrapped/generated/wrapper.h @@ -2022,6 +2022,7 @@ void vFpplppppp(x64emu_t *emu, uintptr_t fnc); void vFppppiipi(x64emu_t *emu, uintptr_t fnc); void vFpppppuuu(x64emu_t *emu, uintptr_t fnc); void vFpppppppp(x64emu_t *emu, uintptr_t fnc); +void iFEuipuupp(x64emu_t *emu, uintptr_t fnc); void iFEpippppp(x64emu_t *emu, uintptr_t fnc); void iFEpuuLppp(x64emu_t *emu, uintptr_t fnc); void iFEpUUuppp(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped/wrappedlibcups.c b/src/wrapped/wrappedlibcups.c index a99f0b45..23541940 100755 --- a/src/wrapped/wrappedlibcups.c +++ b/src/wrapped/wrappedlibcups.c @@ -21,5 +21,54 @@ const char* libcupsName = "libcups.so.2"; #define LIBNAME libcups +#define ADDED_FUNCTIONS() \ + +#include "generated/wrappedlibcupstypes.h" + +#include "wrappercallback.h" + +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) \ +GO(4) + +// cups_dest_cb_t ... +#define GO(A) \ +static uintptr_t my_cups_dest_cb_t_fct_##A = 0; \ +static int my_cups_dest_cb_t_##A(void* a, uint32_t b, void* c) \ +{ \ + return (int)RunFunction(my_context, my_cups_dest_cb_t_fct_##A, 3, a, b, c); \ +} +SUPER() +#undef GO +static void* find_cups_dest_cb_t_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_cups_dest_cb_t_fct_##A == (uintptr_t)fct) return my_cups_dest_cb_t_##A; + SUPER() + #undef GO + #define GO(A) if(my_cups_dest_cb_t_fct_##A == 0) {my_cups_dest_cb_t_fct_##A = (uintptr_t)fct; return my_cups_dest_cb_t_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libcups cups_dest_cb_t callback\n"); + return NULL; +} + +#undef SUPER + +EXPORT int my_cupsEnumDests(x64emu_t* emu, uint32_t flags, int msec, int* cancel, uint32_t type, uint32_t mask, void* f, void* data) +{ + my->cupsEnumDests(flags, msec, cancel, type, mask, find_cups_dest_cb_t_Fct(f), data); +} + +#define CUSTOM_INIT \ + getMy(lib); + +#define CUSTOM_FINI \ + freeMy(); + #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedlibcups_private.h b/src/wrapped/wrappedlibcups_private.h index 0f27d6f5..4978426c 100755 --- a/src/wrapped/wrappedlibcups_private.h +++ b/src/wrapped/wrappedlibcups_private.h @@ -52,7 +52,7 @@ GO(cupsAddOption, iFppip) //GO(_cupsConnect, //GO(cupsConnectDest, //GO(_cupsConvertOptions, -//GO(cupsCopyDest, +GO(cupsCopyDest, iFpip) //GO(cupsCopyDestConflicts, //GO(cupsCopyDestInfo, //GO(_cupsCreateDest, @@ -72,7 +72,7 @@ GO(cupsAddOption, iFppip) //GO(cupsEncodeOptions2, //GO(_cupsEncodingName, //GO(cupsEncryption, -//GO(cupsEnumDests, +GOM(cupsEnumDests, iFEuipuupp) //GO(_cupsFileCheck, //GO(_cupsFileCheckFilter, //GO(cupsFileClose, @@ -545,7 +545,7 @@ GO(ppdMarkDefaults, vFp) //GO(_ppdOpen, //GO(ppdOpen, //GO(ppdOpen2, -//GO(ppdOpenFd, +GO(ppdOpenFd, pFi) //GO(_ppdOpenFile, GO(ppdOpenFile, pFp) //GO(ppdPageLength, |