mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-10-01 07:28:30 +00:00
Implement SDL_GetPath stub for all OSes
This commit is contained in:
@@ -52,4 +52,12 @@ SDL_GetPrefPath(const char *org, const char *app)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char *SDL_GetPath(SDL_Folder folder)
|
||||
{
|
||||
/* TODO: see https://developer.android.com/reference/android/os/Environment#lfields
|
||||
and https://stackoverflow.com/questions/39332085/get-path-to-pictures-directory */
|
||||
SDL_Unsupported();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif /* SDL_FILESYSTEM_ANDROID */
|
||||
|
@@ -132,8 +132,7 @@ SDL_GetPrefPath(const char *org, const char *app)
|
||||
}
|
||||
}
|
||||
|
||||
char *
|
||||
SDL_GetPath(SDL_Folder folder)
|
||||
char *SDL_GetPath(SDL_Folder folder)
|
||||
{
|
||||
@autoreleasepool {
|
||||
#if TARGET_OS_TV
|
||||
@@ -147,87 +146,83 @@ SDL_GetPath(SDL_Folder folder)
|
||||
NSString *str;
|
||||
char *ptr;
|
||||
|
||||
switch (folder)
|
||||
{
|
||||
case SDL_FOLDER_HOME:
|
||||
base = SDL_getenv("HOME");
|
||||
switch (folder) {
|
||||
case SDL_FOLDER_HOME:
|
||||
base = SDL_getenv("HOME");
|
||||
|
||||
if (!base)
|
||||
{
|
||||
SDL_SetError("No $HOME environment variable available");
|
||||
}
|
||||
if (!base) {
|
||||
SDL_SetError("No $HOME environment variable available");
|
||||
}
|
||||
|
||||
retval = SDL_strdup(base);
|
||||
retval = SDL_strdup(base);
|
||||
|
||||
if (!retval)
|
||||
SDL_OutOfMemory();
|
||||
if (!retval) {
|
||||
SDL_OutOfMemory();
|
||||
}
|
||||
|
||||
return retval;
|
||||
return retval;
|
||||
|
||||
case SDL_FOLDER_DESKTOP:
|
||||
dir = NSDesktopDirectory;
|
||||
break;
|
||||
case SDL_FOLDER_DESKTOP:
|
||||
dir = NSDesktopDirectory;
|
||||
break;
|
||||
|
||||
case SDL_FOLDER_DOCUMENTS:
|
||||
dir = NSDocumentDirectory;
|
||||
break;
|
||||
case SDL_FOLDER_DOCUMENTS:
|
||||
dir = NSDocumentDirectory;
|
||||
break;
|
||||
|
||||
case SDL_FOLDER_DOWNLOADS:
|
||||
dir = NSDownloadsDirectory;
|
||||
break;
|
||||
case SDL_FOLDER_DOWNLOADS:
|
||||
dir = NSDownloadsDirectory;
|
||||
break;
|
||||
|
||||
case SDL_FOLDER_MUSIC:
|
||||
dir = NSMusicDirectory;
|
||||
break;
|
||||
case SDL_FOLDER_MUSIC:
|
||||
dir = NSMusicDirectory;
|
||||
break;
|
||||
|
||||
case SDL_FOLDER_PICTURES:
|
||||
dir = NSPicturesDirectory;
|
||||
break;
|
||||
case SDL_FOLDER_PICTURES:
|
||||
dir = NSPicturesDirectory;
|
||||
break;
|
||||
|
||||
case SDL_FOLDER_PUBLICSHARE:
|
||||
dir = NSSharedPublicDirectory;
|
||||
break;
|
||||
case SDL_FOLDER_PUBLICSHARE:
|
||||
dir = NSSharedPublicDirectory;
|
||||
break;
|
||||
|
||||
case SDL_FOLDER_SAVEDGAMES:
|
||||
SDL_SetError("Saved games folder not supported on Cocoa");
|
||||
return NULL;
|
||||
case SDL_FOLDER_SAVEDGAMES:
|
||||
SDL_SetError("Saved games folder not supported on Cocoa");
|
||||
return NULL;
|
||||
|
||||
case SDL_FOLDER_SCREENSHOTS:
|
||||
SDL_SetError("Screenshots folder not supported on Cocoa");
|
||||
return NULL;
|
||||
case SDL_FOLDER_SCREENSHOTS:
|
||||
SDL_SetError("Screenshots folder not supported on Cocoa");
|
||||
return NULL;
|
||||
|
||||
case SDL_FOLDER_TEMPLATES:
|
||||
SDL_SetError("Templates folder not supported on Cocoa");
|
||||
return NULL;
|
||||
case SDL_FOLDER_TEMPLATES:
|
||||
SDL_SetError("Templates folder not supported on Cocoa");
|
||||
return NULL;
|
||||
|
||||
case SDL_FOLDER_VIDEOS:
|
||||
dir = NSMoviesDirectory;
|
||||
break;
|
||||
case SDL_FOLDER_VIDEOS:
|
||||
dir = NSMoviesDirectory;
|
||||
break;
|
||||
|
||||
default:
|
||||
SDL_SetError("Invalid SDL_Folder: %d", (int) folder);
|
||||
return NULL;
|
||||
default:
|
||||
SDL_SetError("Invalid SDL_Folder: %d", (int) folder);
|
||||
return NULL;
|
||||
};
|
||||
|
||||
array = NSSearchPathForDirectoriesInDomains(dir, NSUserDomainMask, YES);
|
||||
|
||||
if ([array count] <= 0)
|
||||
{
|
||||
if ([array count] <= 0) {
|
||||
SDL_SetError("Directory not found");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
str = [array objectAtIndex:0];
|
||||
base = [str fileSystemRepresentation];
|
||||
if (!base)
|
||||
{
|
||||
if (!base) {
|
||||
SDL_SetError("Couldn't get folder path");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
retval = SDL_strdup(base);
|
||||
if (retval == NULL)
|
||||
{
|
||||
if (retval == NULL) {
|
||||
SDL_OutOfMemory();
|
||||
return NULL;
|
||||
}
|
||||
|
@@ -25,22 +25,19 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
/* System dependent filesystem routines */
|
||||
|
||||
char *
|
||||
SDL_GetBasePath(void)
|
||||
char *SDL_GetBasePath(void)
|
||||
{
|
||||
SDL_Unsupported();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char *
|
||||
SDL_GetPrefPath(const char *org, const char *app)
|
||||
char *SDL_GetPrefPath(const char *org, const char *app)
|
||||
{
|
||||
SDL_Unsupported();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char *
|
||||
SDL_GetPath(SDL_Folder folder)
|
||||
char *SDL_GetPath(SDL_Folder folder)
|
||||
{
|
||||
SDL_Unsupported();
|
||||
return NULL;
|
||||
|
@@ -85,4 +85,29 @@ SDL_GetPrefPath(const char *org, const char *app)
|
||||
return retval;
|
||||
}
|
||||
|
||||
char *SDL_GetPath(SDL_Folder folder)
|
||||
{
|
||||
const char *home = NULL;
|
||||
char *retval;
|
||||
|
||||
if (folder != SDL_FOLDER_HOME) {
|
||||
SDL_SetError("Emscripten only supports the home folder");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
home = SDL_getenv("HOME");
|
||||
if (!home) {
|
||||
SDL_SetError("No $HOME environment variable available");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
retval = SDL_strdup(home);
|
||||
|
||||
if (!retval) {
|
||||
SDL_OutOfMemory();
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
#endif /* SDL_FILESYSTEM_EMSCRIPTEN */
|
||||
|
@@ -99,4 +99,53 @@ SDL_GetPrefPath(const char *org, const char *app)
|
||||
return retval;
|
||||
}
|
||||
|
||||
char *SDL_GetPath(SDL_Folder folder)
|
||||
{
|
||||
const char *home = NULL;
|
||||
char *retval;
|
||||
|
||||
home = SDL_getenv("HOME");
|
||||
if (!home) {
|
||||
SDL_SetError("No $HOME environment variable available");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
switch (folder) {
|
||||
case SDL_FOLDER_HOME:
|
||||
retval = SDL_strdup(home);
|
||||
|
||||
if (!retval) {
|
||||
SDL_OutOfMemory();
|
||||
}
|
||||
|
||||
return retval;
|
||||
|
||||
/* TODO: Is Haiku's desktop folder always ~/Desktop/ ? */
|
||||
case SDL_FOLDER_DESKTOP:
|
||||
retval = (char *) SDL_malloc(SDL_strlen(home) + 10);
|
||||
|
||||
if (!retval) {
|
||||
SDL_OutOfMemory();
|
||||
}
|
||||
|
||||
SDL_strlcpy(retval, home, SDL_strlen(home) + 10);
|
||||
SDL_strlcat(retval, "/Desktop/", SDL_strlen(home) + 10);
|
||||
|
||||
return retval;
|
||||
|
||||
case SDL_FOLDER_DOCUMENTS:
|
||||
case SDL_FOLDER_DOWNLOADS:
|
||||
case SDL_FOLDER_MUSIC:
|
||||
case SDL_FOLDER_PICTURES:
|
||||
case SDL_FOLDER_PUBLICSHARE:
|
||||
case SDL_FOLDER_SAVEDGAMES:
|
||||
case SDL_FOLDER_SCREENSHOTS:
|
||||
case SDL_FOLDER_TEMPLATES:
|
||||
case SDL_FOLDER_VIDEOS:
|
||||
default:
|
||||
SDL_SetError("Only HOME and DESKTOP available on Haiku");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* SDL_FILESYSTEM_HAIKU */
|
||||
|
@@ -61,6 +61,13 @@ SDL_GetPrefPath(const char *org, const char *app)
|
||||
return pref_path;
|
||||
}
|
||||
|
||||
/* TODO */
|
||||
char *SDL_GetPath(SDL_Folder folder)
|
||||
{
|
||||
SDL_Unsupported();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
SDL_FORCE_INLINE char *
|
||||
MakePrefPath(const char *app)
|
||||
{
|
||||
|
@@ -104,4 +104,11 @@ SDL_GetPrefPath(const char *org, const char *app)
|
||||
return retval;
|
||||
}
|
||||
|
||||
/* TODO */
|
||||
char *SDL_GetPath(SDL_Folder folder)
|
||||
{
|
||||
SDL_Unsupported();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif /* SDL_FILESYSTEM_PS2 */
|
||||
|
@@ -71,4 +71,11 @@ SDL_GetPrefPath(const char *org, const char *app)
|
||||
return retval;
|
||||
}
|
||||
|
||||
/* TODO */
|
||||
char *SDL_GetPath(SDL_Folder folder)
|
||||
{
|
||||
SDL_Unsupported();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif /* SDL_FILESYSTEM_PSP */
|
||||
|
@@ -201,4 +201,11 @@ SDL_GetPrefPath(const char *org, const char *app)
|
||||
return retval;
|
||||
}
|
||||
|
||||
/* TODO */
|
||||
char *SDL_GetPath(SDL_Folder folder)
|
||||
{
|
||||
SDL_Unsupported();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif /* SDL_FILESYSTEM_RISCOS */
|
||||
|
@@ -521,8 +521,7 @@ xdg_user_dir_lookup (const char *type)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char *
|
||||
SDL_GetPath(SDL_Folder folder)
|
||||
char *SDL_GetPath(SDL_Folder folder)
|
||||
{
|
||||
const char *param = NULL;
|
||||
char *retval;
|
||||
@@ -537,80 +536,79 @@ SDL_GetPath(SDL_Folder folder)
|
||||
PICTURES
|
||||
VIDEOS
|
||||
*/
|
||||
switch(folder)
|
||||
{
|
||||
case SDL_FOLDER_HOME:
|
||||
param = SDL_getenv("HOME");
|
||||
switch(folder) {
|
||||
case SDL_FOLDER_HOME:
|
||||
param = SDL_getenv("HOME");
|
||||
|
||||
if (!param)
|
||||
{
|
||||
SDL_SetError("No $HOME environment variable available");
|
||||
}
|
||||
|
||||
retval = SDL_strdup(param);
|
||||
|
||||
if (!retval)
|
||||
SDL_OutOfMemory();
|
||||
|
||||
return retval;
|
||||
|
||||
case SDL_FOLDER_DESKTOP:
|
||||
param = "DESKTOP";
|
||||
break;
|
||||
|
||||
case SDL_FOLDER_DOCUMENTS:
|
||||
param = "DOCUMENTS";
|
||||
break;
|
||||
|
||||
case SDL_FOLDER_DOWNLOADS:
|
||||
param = "DOWNLOAD";
|
||||
break;
|
||||
|
||||
case SDL_FOLDER_MUSIC:
|
||||
param = "MUSIC";
|
||||
break;
|
||||
|
||||
case SDL_FOLDER_PICTURES:
|
||||
param = "PICTURES";
|
||||
break;
|
||||
|
||||
case SDL_FOLDER_PUBLICSHARE:
|
||||
param = "PUBLICSHARE";
|
||||
break;
|
||||
|
||||
case SDL_FOLDER_SAVEDGAMES:
|
||||
SDL_SetError("Saved Games folder unavailable on XDG");
|
||||
if (!param) {
|
||||
SDL_SetError("No $HOME environment variable available");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
case SDL_FOLDER_SCREENSHOTS:
|
||||
SDL_SetError("Screenshots folder unavailable on XDG");
|
||||
return NULL;
|
||||
retval = SDL_strdup(param);
|
||||
|
||||
case SDL_FOLDER_TEMPLATES:
|
||||
param = "TEMPLATES";
|
||||
break;
|
||||
if (!retval) {
|
||||
SDL_OutOfMemory();
|
||||
}
|
||||
|
||||
case SDL_FOLDER_VIDEOS:
|
||||
param = "VIDEOS";
|
||||
break;
|
||||
return retval;
|
||||
|
||||
default:
|
||||
SDL_SetError("Invalid SDL_Folder: %d", (int) folder);
|
||||
return NULL;
|
||||
case SDL_FOLDER_DESKTOP:
|
||||
param = "DESKTOP";
|
||||
break;
|
||||
|
||||
case SDL_FOLDER_DOCUMENTS:
|
||||
param = "DOCUMENTS";
|
||||
break;
|
||||
|
||||
case SDL_FOLDER_DOWNLOADS:
|
||||
param = "DOWNLOAD";
|
||||
break;
|
||||
|
||||
case SDL_FOLDER_MUSIC:
|
||||
param = "MUSIC";
|
||||
break;
|
||||
|
||||
case SDL_FOLDER_PICTURES:
|
||||
param = "PICTURES";
|
||||
break;
|
||||
|
||||
case SDL_FOLDER_PUBLICSHARE:
|
||||
param = "PUBLICSHARE";
|
||||
break;
|
||||
|
||||
case SDL_FOLDER_SAVEDGAMES:
|
||||
SDL_SetError("Saved Games folder unavailable on XDG");
|
||||
return NULL;
|
||||
|
||||
case SDL_FOLDER_SCREENSHOTS:
|
||||
SDL_SetError("Screenshots folder unavailable on XDG");
|
||||
return NULL;
|
||||
|
||||
case SDL_FOLDER_TEMPLATES:
|
||||
param = "TEMPLATES";
|
||||
break;
|
||||
|
||||
case SDL_FOLDER_VIDEOS:
|
||||
param = "VIDEOS";
|
||||
break;
|
||||
|
||||
default:
|
||||
SDL_SetError("Invalid SDL_Folder: %d", (int) folder);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* param *should* to be set to something at this point, but just in case */
|
||||
if (!param)
|
||||
{
|
||||
if (!param) {
|
||||
SDL_SetError("No corresponding XDG user directory");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
retval = xdg_user_dir_lookup(param);
|
||||
|
||||
if (!retval)
|
||||
{
|
||||
if (!retval) {
|
||||
SDL_SetError("XDG directory not available");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return retval;
|
||||
|
@@ -85,4 +85,11 @@ SDL_GetPrefPath(const char *org, const char *app)
|
||||
return retval;
|
||||
}
|
||||
|
||||
/* TODO */
|
||||
char *SDL_GetPath(SDL_Folder folder)
|
||||
{
|
||||
SDL_Unsupported();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif /* SDL_FILESYSTEM_VITA */
|
||||
|
@@ -232,4 +232,11 @@ SDL_GetPrefPath(const char *org, const char *app)
|
||||
return retval;
|
||||
}
|
||||
|
||||
/* TODO */
|
||||
char *SDL_GetPath(SDL_Folder folder)
|
||||
{
|
||||
SDL_Unsupported();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif /* __WINRT__ */
|
||||
|
Reference in New Issue
Block a user