diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-10-08 19:44:20 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-10-08 19:44:20 +0200 |
| commit | c12f8fa2544dbcfb29416f39f784abefef276ccb (patch) | |
| tree | 0aabd275027832647d282e061ce6827d72beae6e /src/mallochook.c | |
| parent | 7ae36b8667f9ff213c3461a3c7d49978d8d71e4d (diff) | |
| download | box64-c12f8fa2544dbcfb29416f39f784abefef276ccb.tar.gz box64-c12f8fa2544dbcfb29416f39f784abefef276ccb.zip | |
[BOX32] Fixed some X11 function so wine launch (and added BOX64_X11SYNC to help debug X11 programs)
Diffstat (limited to 'src/mallochook.c')
| -rw-r--r-- | src/mallochook.c | 58 |
1 files changed, 57 insertions, 1 deletions
diff --git a/src/mallochook.c b/src/mallochook.c index c97a0183..d900d704 100644 --- a/src/mallochook.c +++ b/src/mallochook.c @@ -181,13 +181,69 @@ static int ispot(size_t l) { SUPER() #undef GO2 #undef GO - +int isCustomAddr(void* p); +#define SPACE32 (void*)0x100000000LL +void* box32_calloc(size_t n, size_t s) +{ + void* ret = box_calloc(n, s); + if(ret<SPACE32) return ret; + box_free(ret); + return customCalloc32(n, s); +} +void* box32_malloc(size_t s) +{ + void* ret = box_malloc(s); + if(ret<SPACE32) return ret; + box_free(ret); + return customMalloc32(s); +} +void* box32_realloc(void* p, size_t s) +{ + if(isCustomAddr(p)) + return customRealloc32(p, s); + void* ret = box_realloc(p, s); + if(ret<SPACE32) return ret; + void* newret = customMalloc32(s); + memcpy(newret, ret, s); + box_free(ret); + return newret; +} +void box32_free(void* p) +{ + if(isCustomAddr(p)) + customFree32(p); + else + box_free(p); +} +void* box32_memalign(size_t align, size_t s) +{ + void* ret = box_memalign(align, s); + if(ret<SPACE32) return ret; + box_free(ret); + return customMemAligned32(align, s); +} +size_t box32_malloc_usable_size(void* p) +{ + if(isCustomAddr(p)) + return customGetUsableSize(p); + else + return box_malloc_usable_size(p); +} +#ifdef BOX32 +#define actual_calloc(A, B) box64_is32bits?box32_calloc(A, B):box_calloc(A, B) +#define actual_malloc(A) box64_is32bits?box32_malloc(A):box_malloc(A) +#define actual_realloc(A, B) box64_is32bits?box32_realloc(A, B):box_realloc(A, B) +#define actual_free(A) box64_is32bits?box32_free(A):box_free(A) +#define actual_memalign(A, B) box64_is32bits?box32_memalign(A, B):box_memalign(A, B) +#define actual_malloc_usable_size(A) box64_is32bits?box32_malloc_usable_size(A):box_malloc_usable_size(A) +#else #define actual_calloc(A, B) box_calloc(A, B) #define actual_malloc(A) box_malloc(A) #define actual_realloc(A, B) box_realloc(A, B) #define actual_free(A) box_free(A) #define actual_memalign(A, B) box_memalign(A, B) #define actual_malloc_usable_size(A) box_malloc_usable_size(A) +#endif // redefining all libc memory allocation routines EXPORT void* malloc(size_t l) |