diff --git a/src/physfs.c b/src/physfs.c index 25415f7..3687685 100644 --- a/src/physfs.c +++ b/src/physfs.c @@ -1679,66 +1679,37 @@ int PHYSFS_setSaneConfig(const char *organization, const char *appName, const char *archiveExt, int includeCdRoms, int archivesFirst) { - const char *basedir = PHYSFS_getBaseDir(); - const char *userdir = PHYSFS_getUserDir(); const char *dirsep = PHYSFS_getDirSeparator(); - PHYSFS_uint64 len = 0; - char *str = NULL; + const char *basedir; + const char *prefdir; BAIL_IF_MACRO(!initialized, PHYSFS_ERR_NOT_INITIALIZED, 0); - /* set write dir... */ - len = (strlen(userdir) + (strlen(organization) * 2) + - (strlen(appName) * 2) + (strlen(dirsep) * 3) + 2); + prefdir = PHYSFS_getPrefDir(organization, appName); + BAIL_IF_MACRO(!prefdir, ERRPASS, 0); - str = (char *) __PHYSFS_smallAlloc(len); + basedir = PHYSFS_getBaseDir(); + BAIL_IF_MACRO(!basedir, ERRPASS, 0); - BAIL_IF_MACRO(!str, PHYSFS_ERR_OUT_OF_MEMORY, 0); - sprintf(str, "%s.%s%s%s", userdir, organization, dirsep, appName); - - if (!PHYSFS_setWriteDir(str)) - { - int no_write = 0; - sprintf(str, ".%s/%s", organization, appName); - if ( (PHYSFS_setWriteDir(userdir)) && - (PHYSFS_mkdir(str)) ) - { - sprintf(str, "%s.%s%s%s", userdir, organization, dirsep, appName); - if (!PHYSFS_setWriteDir(str)) - no_write = 1; - } /* if */ - else - { - no_write = 1; - } /* else */ - - if (no_write) - { - PHYSFS_setWriteDir(NULL); /* just in case. */ - __PHYSFS_smallFree(str); - BAIL_MACRO(PHYSFS_ERR_NO_WRITE_DIR, 0); - } /* if */ - } /* if */ + BAIL_IF_MACRO(!PHYSFS_setWriteDir(prefdir), PHYSFS_ERR_NO_WRITE_DIR, 0); /* Put write dir first in search path... */ - PHYSFS_mount(str, NULL, 0); - __PHYSFS_smallFree(str); + PHYSFS_mount(prefdir, NULL, 0); - /* Put base path on search path... */ + /* Put base path on search path... */ PHYSFS_mount(basedir, NULL, 1); - /* handle CD-ROMs... */ + /* handle CD-ROMs... */ if (includeCdRoms) { char **cds = PHYSFS_getCdRomDirs(); char **i; for (i = cds; *i != NULL; i++) PHYSFS_mount(*i, NULL, 1); - PHYSFS_freeList(cds); } /* if */ - /* Root out archives, and add them to search path... */ + /* Root out archives, and add them to search path... */ if (archiveExt != NULL) { char **rc = PHYSFS_enumerateFiles("/");