r857 - in trunk: . platform

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Tue Mar 20 14:33:56 EDT 2007


Author: icculus
Date: 2007-03-20 14:33:56 -0400 (Tue, 20 Mar 2007)
New Revision: 857

Modified:
   trunk/physfs.c
   trunk/physfs_internal.h
   trunk/platform/beos.cpp
   trunk/platform/os2.c
   trunk/platform/pocketpc.c
   trunk/platform/posix.c
   trunk/platform/unix.c
   trunk/platform/windows.c
Log:
Since all the platform layers were using the same cut-and-paste of the
 malloc/realloc/free allocator, I moved it into physfs.c as a default, which
 is used if the platform layer doesn't offer a platform-specific default
 allocator, which none do at this point, but will soon.


Modified: trunk/physfs.c
===================================================================
--- trunk/physfs.c	2007-03-20 17:57:45 UTC (rev 856)
+++ trunk/physfs.c	2007-03-20 18:33:56 UTC (rev 857)
@@ -2029,14 +2029,40 @@
 } /* PHYSFS_setAllocator */
 
 
+static void *mallocAllocatorMalloc(PHYSFS_uint64 s)
+{
+    BAIL_IF_MACRO(__PHYSFS_ui64FitsAddressSpace(s), ERR_OUT_OF_MEMORY, NULL);
+    #undef malloc
+    return(malloc((size_t) s));
+} /* mallocAllocatorMalloc */
+
+
+static void *mallocAllocatorRealloc(void *ptr, PHYSFS_uint64 s)
+{
+    BAIL_IF_MACRO(__PHYSFS_ui64FitsAddressSpace(s), ERR_OUT_OF_MEMORY, NULL);
+    #undef realloc
+    return(realloc(ptr, (size_t) s));
+} /* mallocAllocatorRealloc */
+
+
+static void mallocAllocatorFree(void *ptr)
+{
+    #undef free
+    free(ptr);
+} /* mallocAllocatorFree */
+
+
 static void setDefaultAllocator(void)
 {
     assert(!externalAllocator);
-    allocator.Init = __PHYSFS_platformAllocatorInit;
-    allocator.Deinit = __PHYSFS_platformAllocatorDeinit;
-    allocator.Malloc = __PHYSFS_platformAllocatorMalloc;
-    allocator.Realloc = __PHYSFS_platformAllocatorRealloc;
-    allocator.Free = __PHYSFS_platformAllocatorFree;
+    if (!__PHYSFS_platformSetDefaultAllocator(&allocator))
+    {
+        allocator.Init = NULL;
+        allocator.Deinit = NULL;
+        allocator.Malloc = mallocAllocatorMalloc;
+        allocator.Realloc = mallocAllocatorRealloc;
+        allocator.Free = mallocAllocatorFree;
+    } /* if */
 } /* setDefaultAllocator */
 
 /* end of physfs.c ... */

Modified: trunk/physfs_internal.h
===================================================================
--- trunk/physfs_internal.h	2007-03-20 17:57:45 UTC (rev 856)
+++ trunk/physfs_internal.h	2007-03-20 18:33:56 UTC (rev 857)
@@ -1719,40 +1719,19 @@
 void __PHYSFS_platformReleaseMutex(void *mutex);
 
 /*
- * Called during PHYSFS_init() to initialize the allocator, if the user
+ * Called at the start of PHYSFS_init() to prepare the allocator, if the user
  *  hasn't selected their own allocator via PHYSFS_setAllocator().
- *  Return zero on initialization error (which will make PHYSFS_init() fail,
- *  too), non-zero on success.
+ *  If the platform has a custom allocator, it should fill in the fields of
+ *  (a) with the proper function pointers and return non-zero.
+ * If the platform just wants to use malloc()/free()/etc, return zero
+ *  immediately and the higher level will handle it. The Init and Deinit
+ *  fields of (a) are optional...set them to NULL if you don't need them.
+ *  Everything else must be implemented. All rules follow those for
+ *  PHYSFS_setAllocator(). If Init isn't NULL, it will be called shortly
+ *  after this function returns non-zero.
  */
-int __PHYSFS_platformAllocatorInit(void);
+int __PHYSFS_platformSetDefaultAllocator(PHYSFS_Allocator *a);
 
-/*
- * Called during PHYSFS_deinit() to deinitialize the allocator, if the user
- *  hasn't selected their own allocator via PHYSFS_setAllocator().
- */
-void __PHYSFS_platformAllocatorDeinit(void);
-
-/*
- * Implement malloc. It's safe to just pass through from the C runtime.
- *  This is used for allocation if the user hasn't selected their own
- *  allocator via PHYSFS_setAllocator().
- */
-void *__PHYSFS_platformAllocatorMalloc(PHYSFS_uint64 s);
-
-/*
- * Implement realloc. It's safe to just pass through from the C runtime.
- *  This is used for allocation if the user hasn't selected their own
- *  allocator via PHYSFS_setAllocator().
- */
-void *__PHYSFS_platformAllocatorRealloc(void *ptr, PHYSFS_uint64 s);
-
-/*
- * Implement free. It's safe to just pass through from the C runtime.
- *  This is used for deallocation if the user hasn't selected their own
- *  allocator via PHYSFS_setAllocator().
- */
-void __PHYSFS_platformAllocatorFree(void *ptr);
-
 #ifdef __cplusplus
 }
 #endif

Modified: trunk/platform/beos.cpp
===================================================================
--- trunk/platform/beos.cpp	2007-03-20 17:57:45 UTC (rev 856)
+++ trunk/platform/beos.cpp	2007-03-20 18:33:56 UTC (rev 857)
@@ -240,6 +240,12 @@
     release_sem(*((sem_id *) mutex));
 } /* __PHYSFS_platformReleaseMutex */
 
+
+int __PHYSFS_platformSetDefaultAllocator(PHYSFS_Allocator *a)
+{
+    return(0);  /* just use malloc() and friends. */
+} /* __PHYSFS_platformSetDefaultAllocator */
+
 #endif  /* PHYSFS_PLATFORM_BEOS */
 
 /* end of beos.cpp ... */

Modified: trunk/platform/os2.c
===================================================================
--- trunk/platform/os2.c	2007-03-20 17:57:45 UTC (rev 856)
+++ trunk/platform/os2.c	2007-03-20 18:33:56 UTC (rev 857)
@@ -690,40 +690,12 @@
 } /* __PHYSFS_platformReleaseMutex */
 
 
-int __PHYSFS_platformAllocatorInit(void)
+/* !!! FIXME: Don't use C runtime for allocators? */
+int __PHYSFS_platformSetDefaultAllocator(PHYSFS_Allocator *a)
 {
-    return(1);  /* always succeeds. */
-} /* __PHYSFS_platformAllocatorInit */
+    return(0);  /* just use malloc() and friends. */
+} /* __PHYSFS_platformSetDefaultAllocator */
 
-
-void __PHYSFS_platformAllocatorDeinit(void)
-{
-    /* no-op */
-} /* __PHYSFS_platformAllocatorInit */
-
-
-void *__PHYSFS_platformAllocatorMalloc(PHYSFS_uint64 s)
-{
-    BAIL_IF_MACRO(__PHYSFS_ui64FitsAddressSpace(s), ERR_OUT_OF_MEMORY, NULL);
-    #undef malloc
-    return(malloc((size_t) s));
-} /* __PHYSFS_platformMalloc */
-
-
-void *__PHYSFS_platformAllocatorRealloc(void *ptr, PHYSFS_uint64 s)
-{
-    BAIL_IF_MACRO(__PHYSFS_ui64FitsAddressSpace(s), ERR_OUT_OF_MEMORY, NULL);
-    #undef realloc
-    return(realloc(ptr, (size_t) s));
-} /* __PHYSFS_platformRealloc */
-
-
-void __PHYSFS_platformAllocatorFree(void *ptr)
-{
-    #undef free
-    free(ptr);
-} /* __PHYSFS_platformAllocatorFree */
-
 #endif  /* PHYSFS_PLATFORM_OS2 */
 
 /* end of os2.c ... */

Modified: trunk/platform/pocketpc.c
===================================================================
--- trunk/platform/pocketpc.c	2007-03-20 17:57:45 UTC (rev 856)
+++ trunk/platform/pocketpc.c	2007-03-20 18:33:56 UTC (rev 857)
@@ -576,40 +576,11 @@
 
 
 /* !!! FIXME: Don't use C runtime for allocators? */
-int __PHYSFS_platformAllocatorInit(void)
+int __PHYSFS_platformSetDefaultAllocator(PHYSFS_Allocator *a)
 {
-    return(1);  /* always succeeds. */
-} /* __PHYSFS_platformAllocatorInit */
+    return(0);  /* just use malloc() and friends. */
+} /* __PHYSFS_platformSetDefaultAllocator */
 
-
-void __PHYSFS_platformAllocatorDeinit(void)
-{
-    /* no-op */
-} /* __PHYSFS_platformAllocatorInit */
-
-
-void *__PHYSFS_platformAllocatorMalloc(PHYSFS_uint64 s)
-{
-    BAIL_IF_MACRO(__PHYSFS_ui64FitsAddressSpace(s), ERR_OUT_OF_MEMORY, NULL);
-    #undef malloc
-    return(malloc((size_t) s));
-} /* __PHYSFS_platformMalloc */
-
-
-void *__PHYSFS_platformAllocatorRealloc(void *ptr, PHYSFS_uint64 s)
-{
-    BAIL_IF_MACRO(__PHYSFS_ui64FitsAddressSpace(s), ERR_OUT_OF_MEMORY, NULL);
-    #undef realloc
-    return(realloc(ptr, (size_t) s));
-} /* __PHYSFS_platformRealloc */
-
-
-void __PHYSFS_platformAllocatorFree(void *ptr)
-{
-    #undef free
-    free(ptr);
-} /* __PHYSFS_platformAllocatorFree */
-
 #endif  /* PHYSFS_PLATFORM_POCKETPC */
 
 /* end of pocketpc.c ... */

Modified: trunk/platform/posix.c
===================================================================
--- trunk/platform/posix.c	2007-03-20 17:57:45 UTC (rev 856)
+++ trunk/platform/posix.c	2007-03-20 18:33:56 UTC (rev 857)
@@ -429,41 +429,6 @@
     return statbuf.st_mtime;
 } /* __PHYSFS_platformGetLastModTime */
 
-
-int __PHYSFS_platformAllocatorInit(void)
-{
-    return(1);  /* always succeeds. */
-} /* __PHYSFS_platformAllocatorInit */
-
-
-void __PHYSFS_platformAllocatorDeinit(void)
-{
-    /* no-op */
-} /* __PHYSFS_platformAllocatorInit */
-
-
-void *__PHYSFS_platformAllocatorMalloc(PHYSFS_uint64 s)
-{
-    BAIL_IF_MACRO(__PHYSFS_ui64FitsAddressSpace(s), ERR_OUT_OF_MEMORY, NULL);
-    #undef malloc
-    return(malloc((size_t) s));
-} /* __PHYSFS_platformMalloc */
-
-
-void *__PHYSFS_platformAllocatorRealloc(void *ptr, PHYSFS_uint64 s)
-{
-    BAIL_IF_MACRO(__PHYSFS_ui64FitsAddressSpace(s), ERR_OUT_OF_MEMORY, NULL);
-    #undef realloc
-    return(realloc(ptr, (size_t) s));
-} /* __PHYSFS_platformRealloc */
-
-
-void __PHYSFS_platformAllocatorFree(void *ptr)
-{
-    #undef free
-    free(ptr);
-} /* __PHYSFS_platformAllocatorFree */
-
 #endif  /* PHYSFS_PLATFORM_POSIX */
 
 /* end of posix.c ... */

Modified: trunk/platform/unix.c
===================================================================
--- trunk/platform/unix.c	2007-03-20 17:57:45 UTC (rev 856)
+++ trunk/platform/unix.c	2007-03-20 18:33:56 UTC (rev 857)
@@ -471,6 +471,12 @@
 } /* __PHYSFS_platformRealPath */
 
 
+int __PHYSFS_platformSetDefaultAllocator(PHYSFS_Allocator *a)
+{
+    return(0);  /* just use malloc() and friends. */
+} /* __PHYSFS_platformSetDefaultAllocator */
+
+
 #if (defined PHYSFS_NO_PTHREADS_SUPPORT)
 
 PHYSFS_uint64 __PHYSFS_platformGetThreadID(void) { return(0x0001); }

Modified: trunk/platform/windows.c
===================================================================
--- trunk/platform/windows.c	2007-03-20 17:57:45 UTC (rev 856)
+++ trunk/platform/windows.c	2007-03-20 18:33:56 UTC (rev 857)
@@ -1051,40 +1051,11 @@
 
 
 /* !!! FIXME: Don't use C runtime for allocators? */
-int __PHYSFS_platformAllocatorInit(void)
+int __PHYSFS_platformSetDefaultAllocator(PHYSFS_Allocator *a)
 {
-    return(1);  /* always succeeds. */
-} /* __PHYSFS_platformAllocatorInit */
+    return(0);  /* just use malloc() and friends. */
+} /* __PHYSFS_platformSetDefaultAllocator */
 
-
-void __PHYSFS_platformAllocatorDeinit(void)
-{
-    /* no-op */
-} /* __PHYSFS_platformAllocatorInit */
-
-
-void *__PHYSFS_platformAllocatorMalloc(PHYSFS_uint64 s)
-{
-    BAIL_IF_MACRO(__PHYSFS_ui64FitsAddressSpace(s), ERR_OUT_OF_MEMORY, NULL);
-    #undef malloc
-    return(malloc((size_t) s));
-} /* __PHYSFS_platformMalloc */
-
-
-void *__PHYSFS_platformAllocatorRealloc(void *ptr, PHYSFS_uint64 s)
-{
-    BAIL_IF_MACRO(__PHYSFS_ui64FitsAddressSpace(s), ERR_OUT_OF_MEMORY, NULL);
-    #undef realloc
-    return(realloc(ptr, (size_t) s));
-} /* __PHYSFS_platformRealloc */
-
-
-void __PHYSFS_platformAllocatorFree(void *ptr)
-{
-    #undef free
-    free(ptr);
-} /* __PHYSFS_platformAllocatorFree */
-
 #endif  /* PHYSFS_PLATFORM_WINDOWS */
 
 /* end of windows.c ... */




More information about the physfs-commits mailing list