diff options
Diffstat (limited to 'src/wrapped32/wrappedmount.c')
| -rw-r--r-- | src/wrapped32/wrappedmount.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/wrapped32/wrappedmount.c b/src/wrapped32/wrappedmount.c index 543e5604..10f37f2a 100644 --- a/src/wrapped32/wrappedmount.c +++ b/src/wrapped32/wrappedmount.c @@ -25,6 +25,38 @@ static const char* mountName = "libmount.so.1"; #include "wrappercallback32.h" +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) \ +GO(4) + +// cmp ... +#define GO(A) \ +static uintptr_t my32_cmp_fct_##A = 0; \ +static int my32_cmp_##A(void* a, void* b, void* c) \ +{ \ + return (int)RunFunctionFmt(my32_cmp_fct_##A, "ppp", a, b, c); \ +} +SUPER() +#undef GO +static void* find_cmp_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_cmp_fct_##A == (uintptr_t)fct) return my32_cmp_##A; + SUPER() + #undef GO + #define GO(A) if(my32_cmp_fct_##A == 0) {my32_cmp_fct_##A = (uintptr_t)fct; return my32_cmp_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libmount cmp callback\n"); + return NULL; +} + +#undef SUPER + typedef struct my_libmnt_optmap_s { /*const*/ char *name; @@ -111,5 +143,10 @@ EXPORT int my32_mnt_optstr_get_flags(x64emu_t* emu, void* optstr, void* flag, vo return my->mnt_optstr_get_flags(optstr, flag, enlarge_libmnt_optmap(map)); } +EXPORT int my32_mnt_table_uniq_fs(void* tb, int flags, void* f) +{ + return my->mnt_table_uniq_fs(tb, flags, find_cmp_Fct(f)); +} + #include "wrappedlib_init32.h" |