Use a base path of "./" on Android

This allows filesystem operations to use internal storage and the asset system by default.
This commit is contained in:
Sam Lantinga
2025-11-15 09:06:03 -08:00
parent 07f995eb72
commit 4bc9ab665d
3 changed files with 11 additions and 9 deletions

View File

@@ -77,6 +77,8 @@ extern "C" {
* - `parent`: the containing directory of the bundle. For example:
* `/Applications/SDLApp/`
*
* **Android Specific Functionality**: This function returns "./", which allows filesystem operations to use internal storage and the asset system.
*
* **Nintendo 3DS Specific Functionality**: This function returns "romfs"
* directory of the application as it is uncommon to store resources outside
* the executable. As such it is not a writable directory.

View File

@@ -31,9 +31,7 @@
char *SDL_SYS_GetBasePath(void)
{
// The current working directory is / on Android
SDL_Unsupported();
return NULL;
return SDL_strdup("./");
}
char *SDL_SYS_GetPrefPath(const char *org, const char *app)

View File

@@ -263,12 +263,7 @@ static SDL_Storage *GENERIC_Title_Create(const char *override, SDL_PropertiesID
}
} else {
const char *base = SDL_GetBasePath();
// On Android, SDL_GetBasePath() can be NULL: use empty base.
#ifdef SDL_PLATFORM_ANDROID
basepath = base ? SDL_strdup(base) : SDL_strdup("");
#else
basepath = base ? SDL_strdup(base) : NULL;
#endif
}
if (basepath != NULL) {
@@ -343,8 +338,13 @@ SDL_Storage *GENERIC_OpenFileStorage(const char *path)
SDL_Storage *result;
char *basepath = NULL;
char *prepend = NULL;
bool is_absolute = false;
#ifdef SDL_PLATFORM_ANDROID
// Use a base path of "." so the filesystem operations fall back to internal storage and the asset system
if (!path || !*path) {
path = "./";
}
#else
if (!path || !*path) {
#ifdef SDL_PLATFORM_WINDOWS
path = "C:/";
@@ -353,6 +353,7 @@ SDL_Storage *GENERIC_OpenFileStorage(const char *path)
#endif
}
bool is_absolute = false;
#ifdef SDL_PLATFORM_WINDOWS
const char ch = (char) SDL_toupper(path[0]);
is_absolute = (ch == '/') || // some sort of absolute Unix-style path.
@@ -367,6 +368,7 @@ SDL_Storage *GENERIC_OpenFileStorage(const char *path)
return NULL;
}
}
#endif // SDL_PLATFORM_ANDROID
const size_t len = SDL_strlen(path);
const char *appended_separator = "";