From 72b232d4f5a7d398180861c9d6aad2aa39a51e79 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Sun, 21 Mar 2010 12:11:39 -0400 Subject: [PATCH] If $HOME is invalid, scratch together a different userdir. Partially fixes http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=553174 --- src/physfs.c | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/src/physfs.c b/src/physfs.c index aa83d08d..bdcfaefc 100644 --- a/src/physfs.c +++ b/src/physfs.c @@ -613,18 +613,21 @@ static int freeDirHandle(DirHandle *dh, FileHandle *openList) static char *calculateUserDir(void) { - char *retval = NULL; - const char *str = NULL; + char *retval = __PHYSFS_platformGetUserDir(); + if (retval != NULL) + { + /* make sure it really exists and is normalized. */ + char *ptr = __PHYSFS_platformRealPath(retval); + allocator.Free(retval); + retval = ptr; + } /* if */ - str = __PHYSFS_platformGetUserDir(); - if (str != NULL) - retval = (char *) str; - else + if (retval == NULL) { const char *dirsep = PHYSFS_getDirSeparator(); const char *uname = __PHYSFS_platformGetUserName(); + const char *str = (uname != NULL) ? uname : "default"; - str = (uname != NULL) ? uname : "default"; retval = (char *) allocator.Malloc(strlen(baseDir) + strlen(str) + strlen(dirsep) + 6); @@ -761,13 +764,6 @@ int PHYSFS_init(const char *argv0) BAIL_IF_MACRO(!appendDirSep(&baseDir), NULL, 0); userDir = calculateUserDir(); - if (userDir != NULL) - { - ptr = __PHYSFS_platformRealPath(userDir); - allocator.Free(userDir); - userDir = ptr; - } /* if */ - if ((userDir == NULL) || (!appendDirSep(&userDir))) { allocator.Free(baseDir);