mirror of https://github.com/libsdl-org/SDL
Add trailing path separator to SDL_GetUserFolder()
This commit is contained in:
parent
97d0e78842
commit
b9d3d746a0
|
@ -224,6 +224,9 @@ typedef enum SDL_Folder
|
||||||
* Note that the function is expensive, and should be called once at the
|
* Note that the function is expensive, and should be called once at the
|
||||||
* beginning of the execution and kept for as long as needed.
|
* beginning of the execution and kept for as long as needed.
|
||||||
*
|
*
|
||||||
|
* The returned path is guaranteed to end with a path separator ('\\' on
|
||||||
|
* Windows, '/' on most other platforms).
|
||||||
|
*
|
||||||
* The returned value is owned by the caller and should be freed with
|
* The returned value is owned by the caller and should be freed with
|
||||||
* SDL_free().
|
* SDL_free().
|
||||||
*
|
*
|
||||||
|
|
|
@ -209,11 +209,17 @@ char *SDL_GetUserFolder(SDL_Folder folder)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
retval = SDL_strdup(base);
|
retval = SDL_malloc(SDL_strlen(base) + 2);
|
||||||
if (retval == NULL) {
|
if (retval == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (SDL_snprintf(retval, SDL_strlen(base) + 2, "%s/", base) < 0) {
|
||||||
|
SDL_SetError("Couldn't snprintf folder path for Cocoa: %s", base);
|
||||||
|
SDL_free(retval);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
for (ptr = retval + 1; *ptr; ptr++) {
|
for (ptr = retval + 1; *ptr; ptr++) {
|
||||||
if (*ptr == '/') {
|
if (*ptr == '/') {
|
||||||
*ptr = '\0';
|
*ptr = '\0';
|
||||||
|
@ -221,7 +227,6 @@ char *SDL_GetUserFolder(SDL_Folder folder)
|
||||||
*ptr = '/';
|
*ptr = '/';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mkdir(retval, 0700);
|
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
#endif /* SDL_PLATFORM_TVOS */
|
#endif /* SDL_PLATFORM_TVOS */
|
||||||
|
|
|
@ -97,7 +97,18 @@ char *SDL_GetUserFolder(SDL_Folder folder)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return SDL_strdup(home);
|
char *retval = SDL_malloc(SDL_strlen(home) + 2);
|
||||||
|
if (!retval) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SDL_snprintf(retval, SDL_strlen(home) + 2, "%s/", home) < 0) {
|
||||||
|
SDL_SetError("Couldn't snprintf home path for Emscripten: %s", home);
|
||||||
|
SDL_free(retval);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* SDL_FILESYSTEM_EMSCRIPTEN */
|
#endif /* SDL_FILESYSTEM_EMSCRIPTEN */
|
||||||
|
|
|
@ -107,15 +107,30 @@ char *SDL_GetUserFolder(SDL_Folder folder)
|
||||||
|
|
||||||
switch (folder) {
|
switch (folder) {
|
||||||
case SDL_FOLDER_HOME:
|
case SDL_FOLDER_HOME:
|
||||||
return SDL_strdup(home);
|
retval = (char *) SDL_malloc(SDL_strlen(home) + 2);
|
||||||
|
if (!retval) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SDL_snprintf(retval, SDL_strlen(home) + 2, "%s/", home) < 0) {
|
||||||
|
SDL_SetError("Couldn't snprintf home path for Haiku: %s", home);
|
||||||
|
SDL_free(retval);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
|
||||||
/* TODO: Is Haiku's desktop folder always ~/Desktop/ ? */
|
/* TODO: Is Haiku's desktop folder always ~/Desktop/ ? */
|
||||||
case SDL_FOLDER_DESKTOP:
|
case SDL_FOLDER_DESKTOP:
|
||||||
retval = (char *) SDL_malloc(SDL_strlen(home) + 10);
|
retval = (char *) SDL_malloc(SDL_strlen(home) + 10);
|
||||||
|
if (!retval) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (retval) {
|
if (SDL_snprintf(retval, SDL_strlen(home) + 10, "%s/Desktop/", home) < 0) {
|
||||||
SDL_strlcpy(retval, home, SDL_strlen(home) + 10);
|
SDL_SetError("Couldn't snprintf desktop path for Haiku: %s/Desktop/", home);
|
||||||
SDL_strlcat(retval, "/Desktop/", SDL_strlen(home) + 10);
|
SDL_free(retval);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
|
|
|
@ -514,6 +514,7 @@ char *SDL_GetUserFolder(SDL_Folder folder)
|
||||||
{
|
{
|
||||||
const char *param = NULL;
|
const char *param = NULL;
|
||||||
char *retval;
|
char *retval;
|
||||||
|
char *newretval;
|
||||||
|
|
||||||
/* According to `man xdg-user-dir`, the possible values are:
|
/* According to `man xdg-user-dir`, the possible values are:
|
||||||
DESKTOP
|
DESKTOP
|
||||||
|
@ -594,6 +595,16 @@ char *SDL_GetUserFolder(SDL_Folder folder)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
newretval = (char *) SDL_realloc(retval, SDL_strlen(retval) + 2);
|
||||||
|
|
||||||
|
if (!newretval) {
|
||||||
|
SDL_free(retval);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
retval = newretval;
|
||||||
|
SDL_strlcat(retval, "/", SDL_strlen(retval) + 2);
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -322,6 +322,19 @@ char *SDL_GetUserFolder(SDL_Folder folder)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (retval) {
|
||||||
|
char *newretval = (char *) SDL_realloc(retval, SDL_strlen(retval) + 2);
|
||||||
|
|
||||||
|
if (!newretval) {
|
||||||
|
SDL_free(retval);
|
||||||
|
retval = NULL; /* will be returned */
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
retval = newretval;
|
||||||
|
SDL_strlcat(retval, "\\", SDL_strlen(retval) + 2);
|
||||||
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
if (lib) {
|
if (lib) {
|
||||||
FreeLibrary(lib);
|
FreeLibrary(lib);
|
||||||
|
|
|
@ -250,6 +250,8 @@ char *SDL_GetUserFolder(SDL_Folder folder)
|
||||||
return NULL;
|
return NULL;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
wpath += L"\\";
|
||||||
|
|
||||||
return WIN_StringToUTF8(wpath.c_str());
|
return WIN_StringToUTF8(wpath.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,6 @@ int main(int argc, char *argv[]) {
|
||||||
const SDL_FRect open_folder_rect = { 370, 50, 220, 140 };
|
const SDL_FRect open_folder_rect = { 370, 50, 220, 140 };
|
||||||
int i;
|
int i;
|
||||||
char *initial_path = NULL;
|
char *initial_path = NULL;
|
||||||
char path_with_trailing_slash[2048];
|
|
||||||
|
|
||||||
/* Initialize test framework */
|
/* Initialize test framework */
|
||||||
state = SDLTest_CommonCreateState(argv, 0);
|
state = SDLTest_CommonCreateState(argv, 0);
|
||||||
|
@ -94,10 +93,6 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
if (!initial_path) {
|
if (!initial_path) {
|
||||||
SDL_Log("Will not use an initial path, couldn't get the home directory path: %s\n", SDL_GetError());
|
SDL_Log("Will not use an initial path, couldn't get the home directory path: %s\n", SDL_GetError());
|
||||||
path_with_trailing_slash[0] = '\0';
|
|
||||||
} else {
|
|
||||||
SDL_snprintf(path_with_trailing_slash, sizeof(path_with_trailing_slash), "%s/", initial_path);
|
|
||||||
SDL_free(initial_path);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
|
@ -119,11 +114,11 @@ int main(int argc, char *argv[]) {
|
||||||
* - Nonzero if the user is allowed to choose multiple entries (not for SDL_ShowSaveFileDialog)
|
* - Nonzero if the user is allowed to choose multiple entries (not for SDL_ShowSaveFileDialog)
|
||||||
*/
|
*/
|
||||||
if (SDL_PointInRectFloat(&p, &open_file_rect)) {
|
if (SDL_PointInRectFloat(&p, &open_file_rect)) {
|
||||||
SDL_ShowOpenFileDialog(callback, NULL, w, filters, path_with_trailing_slash, 1);
|
SDL_ShowOpenFileDialog(callback, NULL, w, filters, initial_path, 1);
|
||||||
} else if (SDL_PointInRectFloat(&p, &open_folder_rect)) {
|
} else if (SDL_PointInRectFloat(&p, &open_folder_rect)) {
|
||||||
SDL_ShowOpenFolderDialog(callback, NULL, w, path_with_trailing_slash, 1);
|
SDL_ShowOpenFolderDialog(callback, NULL, w, initial_path, 1);
|
||||||
} else if (SDL_PointInRectFloat(&p, &save_file_rect)) {
|
} else if (SDL_PointInRectFloat(&p, &save_file_rect)) {
|
||||||
SDL_ShowSaveFileDialog(callback, NULL, w, filters, path_with_trailing_slash);
|
SDL_ShowSaveFileDialog(callback, NULL, w, filters, initial_path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -152,6 +147,10 @@ int main(int argc, char *argv[]) {
|
||||||
SDL_RenderPresent(r);
|
SDL_RenderPresent(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (initial_path) {
|
||||||
|
SDL_free(initial_path);
|
||||||
|
}
|
||||||
|
|
||||||
SDLTest_CleanupTextDrawing();
|
SDLTest_CleanupTextDrawing();
|
||||||
SDL_DestroyRenderer(r);
|
SDL_DestroyRenderer(r);
|
||||||
SDL_DestroyWindow(w);
|
SDL_DestroyWindow(w);
|
||||||
|
|
Loading…
Reference in New Issue