Change how Unix version of __PHYSFS_platformCurrentDir() allocates memory.
authorRyan C. Gordon <icculus@icculus.org>
Sun, 11 Mar 2012 03:39:57 -0400
changeset 1210 cf758fec0273
parent 1209 141eb73da2c5
child 1211 09280603503b
Change how Unix version of __PHYSFS_platformCurrentDir() allocates memory.
src/platform_unix.c
--- a/src/platform_unix.c	Sun Mar 11 03:09:07 2012 -0400
+++ b/src/platform_unix.c	Sun Mar 11 03:39:57 2012 -0400
@@ -307,18 +307,13 @@
 
 char *__PHYSFS_platformCurrentDir(void)
 {
-    /*
-     * This can't just do platformRealPath("."), since that would eventually
-     *  just end up calling back into here.
-     */
-
-    int allocSize = 0;
+    int allocSize = 64;
     char *retval = NULL;
     char *ptr;
 
     do
     {
-        allocSize += 100;
+        allocSize *= 2;
         ptr = (char *) allocator.Realloc(retval, allocSize);
         if (ptr == NULL)
         {
@@ -333,15 +328,17 @@
 
     if (ptr == NULL && errno)
     {
-            /*
-             * getcwd() failed for some reason, for example current
-             * directory not existing.
-             */
+        /* getcwd() failed , for example current directory not existing... */
         if (retval != NULL)
             allocator.Free(retval);
         BAIL_MACRO(ERR_NO_SUCH_FILE, NULL);
     } /* if */
 
+    /* try to shrink buffer... */
+    ptr = (char *) allocator.Realloc(retval, strlen(retval) + 1);
+    if (ptr != NULL)
+        retval = ptr;  /* oh well if it failed. */
+
     return retval;
 } /* __PHYSFS_platformCurrentDir */