From b7e0ec73917c51e09432b9e5355e0439ca8adaef Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Sun, 11 Mar 2012 03:39:57 -0400 Subject: [PATCH] Change how Unix version of __PHYSFS_platformCurrentDir() allocates memory. --- src/platform_unix.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/platform_unix.c b/src/platform_unix.c index aa9be7c3..549548dd 100644 --- a/src/platform_unix.c +++ b/src/platform_unix.c @@ -307,18 +307,13 @@ char *__PHYSFS_platformRealPath(const char *path) 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 @@ char *__PHYSFS_platformCurrentDir(void) 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 */