Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Patches from David Hedbor to handle missing current working directories.
  "The attached patch makes PhysFS handle the case when the current
   directory (as returned by getcwd()) has been deleted.
   Fix 1, platform/unix.c:
    Only retry getcwd if the error is ERANGE. Before it retried till the
    malloc failed in the case of the directory not existing.
  Fix 2: physfs.c:
    If __PHYSFS_platformCurrentDir() return's NULL, use the root as the
    base dir. Bad solution but the best I can think of (alternative :
    use /tmp or Windows TEMP dir?)."
  • Loading branch information
icculus committed Sep 14, 2001
1 parent c2b2506 commit c3a00ee
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 4 deletions.
14 changes: 13 additions & 1 deletion physfs.c
Expand Up @@ -340,7 +340,19 @@ static char *calculateBaseDir(const char *argv0)
/*
* Last ditch effort: it's the current working directory. (*shrug*)
*/
return(__PHYSFS_platformCurrentDir());
retval = __PHYSFS_platformCurrentDir();
if(retval != NULL) {
return(retval);
}

/*
* Ok, current directory doesn't exist, use the root directory.
* Not a good alternative, but it only happens if the current
* directory was deleted from under the program.
*/
retval = (char *) malloc(strlen(dirsep) + 1);
strcpy(retval, dirsep);
return(retval);
} /* calculateBaseDir */


Expand Down
13 changes: 10 additions & 3 deletions platform/unix.c
Expand Up @@ -436,11 +436,18 @@ char *__PHYSFS_platformCurrentDir(void)
free(retval);
BAIL_IF_MACRO(1, ERR_OUT_OF_MEMORY, NULL);
} /* if */

retval = ptr;
ptr = getcwd(retval, allocSize);
} while (ptr == NULL);

} while (ptr == NULL && errno == ERANGE);
if(ptr == NULL && errno) {
/* getcwd() failed for some reason, for example current
* directory not existing.
*/
if (retval != NULL)
free(retval);
BAIL_IF_MACRO(1, ERR_NO_SUCH_FILE, NULL);
}
return(retval);
} /* __PHYSFS_platformCurrentDir */

Expand Down

0 comments on commit c3a00ee

Please sign in to comment.