about summary refs log tree commit diff stats
path: root/src/mallochook.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-10-08 19:44:20 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-10-08 19:44:20 +0200
commitc12f8fa2544dbcfb29416f39f784abefef276ccb (patch)
tree0aabd275027832647d282e061ce6827d72beae6e /src/mallochook.c
parent7ae36b8667f9ff213c3461a3c7d49978d8d71e4d (diff)
downloadbox64-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.c58
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)