diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-10-03 12:26:38 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-10-03 12:26:38 +0200 |
| commit | e2492a142613caeda4e85b9d9762e0697aacc9de (patch) | |
| tree | dbe8d2c41a57afcf9a5a847ee9a537f52ee16229 /src/wrapped32/wrappedudev1.c | |
| parent | f750391c2eec3e22a38714057333c1ba9830babc (diff) | |
| download | box64-e2492a142613caeda4e85b9d9762e0697aacc9de.tar.gz box64-e2492a142613caeda4e85b9d9762e0697aacc9de.zip | |
[BOX32][WRAPPER] Added full wrapped support for 32bits libudev0 and libudev1
Diffstat (limited to 'src/wrapped32/wrappedudev1.c')
| -rw-r--r-- | src/wrapped32/wrappedudev1.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/wrapped32/wrappedudev1.c b/src/wrapped32/wrappedudev1.c new file mode 100644 index 00000000..00cc23ec --- /dev/null +++ b/src/wrapped32/wrappedudev1.c @@ -0,0 +1,69 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include <dlfcn.h> +#include <stdarg.h> + +#include "wrappedlibs.h" + +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "debug.h" +#include "myalign32.h" +#include "callback.h" +#include "emu/x64emu_private.h" + +static const char* udev1Name = "libudev.so.1"; +#define LIBNAME udev1 +// fallback to 0 version... Not sure if really correct (probably not) +#define ALTNAME "libudev.so.0" + +#define ADDED_FUNCTIONS() \ + +#include "generated/wrappedudev1types32.h" + +#include "wrappercallback32.h" + +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) \ +GO(4) + +// log_fn ... +#define GO(A) \ +static uintptr_t my_log_fn_fct_##A = 0; \ +static void my_log_fn_##A(void* udev, int p, void *f, int l, void* fn, void* fmt, va_list args) \ +{ \ + static char buff[1024]; \ + vsnprintf(buff, 1023, fmt, args); \ + buff[1023]=0; \ + RunFunction(my_log_fn_fct_##A, 7, udev, p, f, l, fn, "%s", buff); \ +} +SUPER() +#undef GO +static void* find_log_fn_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_log_fn_fct_##A == (uintptr_t)fct) return my_log_fn_##A; + SUPER() + #undef GO + #define GO(A) if(my_log_fn_fct_##A == 0) {my_log_fn_fct_##A = (uintptr_t)fct; return my_log_fn_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for udev1 log_fn callback\n"); + return NULL; +} +#undef SUPER + +EXPORT void my32_udev_set_log_fn(x64emu_t* emu, void* udev, void* f) +{ + my->udev_set_log_fn(udev, find_log_fn_Fct(f)); +} + +#include "wrappedlib_init32.h" |