diff --git a/src/filesystem/ps2/SDL_sysfilesystem.c b/src/filesystem/ps2/SDL_sysfilesystem.c index 191c96237..21c24b61b 100644 --- a/src/filesystem/ps2/SDL_sysfilesystem.c +++ b/src/filesystem/ps2/SDL_sysfilesystem.c @@ -47,6 +47,33 @@ SDL_GetBasePath(void) return retval; } +/* Do a recursive mkdir of parents folders */ +static void recursive_mkdir(const char *dir) { + char tmp[FILENAME_MAX]; + char *base = SDL_GetBasePath(); + char *p = NULL; + size_t len; + + snprintf(tmp, sizeof(tmp),"%s",dir); + len = strlen(tmp); + if (tmp[len - 1] == '/') + tmp[len - 1] = 0; + + for (p = tmp + 1; *p; p++) { + if (*p == '/') { + *p = 0; + // Just creating subfolders from current path + if (strstr(tmp, base) != NULL) + mkdir(tmp, S_IRWXU); + + *p = '/'; + } + } + + free(base); + mkdir(tmp, S_IRWXU); +} + char * SDL_GetPrefPath(const char *org, const char *app) { @@ -71,7 +98,7 @@ SDL_GetPrefPath(const char *org, const char *app) } free(base); - mkdir(retval, 0x0755); + recursive_mkdir(retval); return retval; }