[runtime] Add mono_set_allocator_vtable which expose the eglib alloc vtable functiona...
authorRodrigo Kumpera <kumpera@gmail.com>
Mon, 11 Jul 2016 17:23:06 +0000 (13:23 -0400)
committerRodrigo Kumpera <kumpera@gmail.com>
Mon, 11 Jul 2016 17:23:20 +0000 (13:23 -0400)
mono/utils/mono-publib.c
mono/utils/mono-publib.h

index 0c7b8249a60b2c2b8db69294c79df3245420271c..927a933d54bb50dde98dfd235926ea0e741ed918 100644 (file)
@@ -8,9 +8,21 @@ mono_free (void *ptr)
        g_free (ptr);
 }
 
-void
+
+/**
+ * mono_set_allocator_vtable
+ *
+ * Make the runtime use the functions in @vtable for allocating memory.
+ * The provided functions must have the same semantics of their libc's equivalents.
+ *
+ * @return TRUE is the vtable was installed. FALSE if the version is incompatible.
+ */
+mono_bool
 mono_set_allocator_vtable (MonoAllocatorVTable* vtable)
 {
+       if (vtable->version != MONO_ALLOCATOR_VTABLE_VERSION)
+               return FALSE;
        GMemVTable g_mem_vtable = { vtable->malloc, vtable->realloc, vtable->free, vtable->calloc};
        g_mem_set_vtable (&g_mem_vtable);
+       return TRUE;
 }
index d6249f1ca3facf372aa4ba7187a414dbc75ae0fc..89d4fb68b7590a565057dd42d4ca1844ac571340 100644 (file)
@@ -73,6 +73,20 @@ typedef void (*MonoHFunc)    (void* key, void* value, void* user_data);
 
 MONO_API void mono_free (void *);
 
+#define MONO_ALLOCATOR_VTABLE_VERSION 1
+
+typedef struct {
+       int version;
+       void *(*malloc)      (size_t size);
+       void *(*realloc)     (void *mem, size_t count);
+       void (*free)        (void *mem);
+       void *(*calloc)      (size_t count, size_t size);
+} MonoAllocatorVTable;
+
+MONO_API mono_bool
+mono_set_allocator_vtable (MonoAllocatorVTable* vtable);
+
+
 #define MONO_CONST_RETURN const
 
 /*