diff options
Diffstat (limited to '3rdparty/SDL2/src/filesystem')
9 files changed, 0 insertions, 1051 deletions
diff --git a/3rdparty/SDL2/src/filesystem/android/SDL_sysfilesystem.c b/3rdparty/SDL2/src/filesystem/android/SDL_sysfilesystem.c deleted file mode 100644 index 3bdf9966d7f..00000000000 --- a/3rdparty/SDL2/src/filesystem/android/SDL_sysfilesystem.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -#ifdef SDL_FILESYSTEM_ANDROID - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* System dependent filesystem routines */ - -#include <unistd.h> -#include <errno.h> - -#include "SDL_error.h" -#include "SDL_filesystem.h" -#include "SDL_system.h" - - -char * -SDL_GetBasePath(void) -{ - /* The current working directory is / on Android */ - return NULL; -} - -char * -SDL_GetPrefPath(const char *org, const char *app) -{ - const char *path = SDL_AndroidGetInternalStoragePath(); - if (path) { - size_t pathlen = SDL_strlen(path)+2; - char *fullpath = (char *)SDL_malloc(pathlen); - if (!fullpath) { - SDL_OutOfMemory(); - return NULL; - } - SDL_snprintf(fullpath, pathlen, "%s/", path); - return fullpath; - } - return NULL; -} - -#endif /* SDL_FILESYSTEM_ANDROID */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/3rdparty/SDL2/src/filesystem/cocoa/SDL_sysfilesystem.m b/3rdparty/SDL2/src/filesystem/cocoa/SDL_sysfilesystem.m deleted file mode 100644 index 6dee5805240..00000000000 --- a/3rdparty/SDL2/src/filesystem/cocoa/SDL_sysfilesystem.m +++ /dev/null @@ -1,106 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -#ifdef SDL_FILESYSTEM_COCOA - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* System dependent filesystem routines */ - -#include <Foundation/Foundation.h> -#include <sys/stat.h> -#include <sys/types.h> - -#include "SDL_error.h" -#include "SDL_stdinc.h" -#include "SDL_filesystem.h" - -char * -SDL_GetBasePath(void) -{ @autoreleasepool -{ - NSBundle *bundle = [NSBundle mainBundle]; - const char* baseType = [[[bundle infoDictionary] objectForKey:@"SDL_FILESYSTEM_BASE_DIR_TYPE"] UTF8String]; - const char *base = NULL; - char *retval = NULL; - - if (baseType == NULL) { - baseType = "resource"; - } - if (SDL_strcasecmp(baseType, "bundle")==0) { - base = [[bundle bundlePath] fileSystemRepresentation]; - } else if (SDL_strcasecmp(baseType, "parent")==0) { - base = [[[bundle bundlePath] stringByDeletingLastPathComponent] fileSystemRepresentation]; - } else { - /* this returns the exedir for non-bundled and the resourceDir for bundled apps */ - base = [[bundle resourcePath] fileSystemRepresentation]; - } - - if (base) { - const size_t len = SDL_strlen(base) + 2; - retval = (char *) SDL_malloc(len); - if (retval == NULL) { - SDL_OutOfMemory(); - } else { - SDL_snprintf(retval, len, "%s/", base); - } - } - - return retval; -}} - -char * -SDL_GetPrefPath(const char *org, const char *app) -{ @autoreleasepool -{ - char *retval = NULL; - - NSArray *array = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES); - - if ([array count] > 0) { /* we only want the first item in the list. */ - NSString *str = [array objectAtIndex:0]; - const char *base = [str fileSystemRepresentation]; - if (base) { - const size_t len = SDL_strlen(base) + SDL_strlen(org) + SDL_strlen(app) + 4; - retval = (char *) SDL_malloc(len); - if (retval == NULL) { - SDL_OutOfMemory(); - } else { - char *ptr; - SDL_snprintf(retval, len, "%s/%s/%s/", base, org, app); - for (ptr = retval+1; *ptr; ptr++) { - if (*ptr == '/') { - *ptr = '\0'; - mkdir(retval, 0700); - *ptr = '/'; - } - } - mkdir(retval, 0700); - } - } - } - - return retval; -}} - -#endif /* SDL_FILESYSTEM_COCOA */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/3rdparty/SDL2/src/filesystem/dummy/SDL_sysfilesystem.c b/3rdparty/SDL2/src/filesystem/dummy/SDL_sysfilesystem.c deleted file mode 100644 index 2570f4c75cf..00000000000 --- a/3rdparty/SDL2/src/filesystem/dummy/SDL_sysfilesystem.c +++ /dev/null @@ -1,47 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -#if defined(SDL_FILESYSTEM_DUMMY) || defined(SDL_FILESYSTEM_DISABLED) - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* System dependent filesystem routines */ - -#include "SDL_error.h" -#include "SDL_filesystem.h" - -char * -SDL_GetBasePath(void) -{ - SDL_Unsupported(); - return NULL; -} - -char * -SDL_GetPrefPath(const char *org, const char *app) -{ - SDL_Unsupported(); - return NULL; -} - -#endif /* SDL_FILESYSTEM_DUMMY || SDL_FILESYSTEM_DISABLED */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/3rdparty/SDL2/src/filesystem/emscripten/SDL_sysfilesystem.c b/3rdparty/SDL2/src/filesystem/emscripten/SDL_sysfilesystem.c deleted file mode 100644 index ca49df1b984..00000000000 --- a/3rdparty/SDL2/src/filesystem/emscripten/SDL_sysfilesystem.c +++ /dev/null @@ -1,69 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -#ifdef SDL_FILESYSTEM_EMSCRIPTEN - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* System dependent filesystem routines */ -#include <errno.h> -#include <sys/stat.h> - -#include "SDL_error.h" -#include "SDL_filesystem.h" - -#include <emscripten/emscripten.h> - -char * -SDL_GetBasePath(void) -{ - char *retval = "/"; - return SDL_strdup(retval); -} - -char * -SDL_GetPrefPath(const char *org, const char *app) -{ - const char *append = "/libsdl/"; - char *retval; - size_t len = 0; - - len = SDL_strlen(append) + SDL_strlen(org) + SDL_strlen(app) + 3; - retval = (char *) SDL_malloc(len); - if (!retval) { - SDL_OutOfMemory(); - return NULL; - } - - SDL_snprintf(retval, len, "%s%s/%s/", append, org, app); - - if (mkdir(retval, 0700) != 0 && errno != EEXIST) { - SDL_SetError("Couldn't create directory '%s': '%s'", retval, strerror(errno)); - SDL_free(retval); - return NULL; - } - - return retval; -} - -#endif /* SDL_FILESYSTEM_EMSCRIPTEN */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/3rdparty/SDL2/src/filesystem/haiku/SDL_sysfilesystem.cc b/3rdparty/SDL2/src/filesystem/haiku/SDL_sysfilesystem.cc deleted file mode 100644 index 03489168e8a..00000000000 --- a/3rdparty/SDL2/src/filesystem/haiku/SDL_sysfilesystem.cc +++ /dev/null @@ -1,93 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -#ifdef SDL_FILESYSTEM_HAIKU - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* System dependent filesystem routines */ - -#include <os/kernel/image.h> -#include <os/storage/Directory.h> -#include <os/storage/Entry.h> -#include <os/storage/Path.h> - -#include "SDL_error.h" -#include "SDL_stdinc.h" -#include "SDL_assert.h" -#include "SDL_filesystem.h" - -char * -SDL_GetBasePath(void) -{ - image_info info; - int32 cookie = 0; - - while (get_next_image_info(0, &cookie, &info) == B_OK) { - if (info.type == B_APP_IMAGE) { - break; - } - } - - BEntry entry(info.name, true); - BPath path; - status_t rc = entry.GetPath(&path); /* (path) now has binary's path. */ - SDL_assert(rc == B_OK); - rc = path.GetParent(&path); /* chop filename, keep directory. */ - SDL_assert(rc == B_OK); - const char *str = path.Path(); - SDL_assert(str != NULL); - - const size_t len = SDL_strlen(str); - char *retval = (char *) SDL_malloc(len + 2); - if (!retval) { - SDL_OutOfMemory(); - return NULL; - } - - SDL_memcpy(retval, str, len); - retval[len] = '/'; - retval[len+1] = '\0'; - return retval; -} - - -char * -SDL_GetPrefPath(const char *org, const char *app) -{ - // !!! FIXME: is there a better way to do this? - const char *home = SDL_getenv("HOME"); - const char *append = "config/settings/"; - const size_t len = SDL_strlen(home) + SDL_strlen(append) + SDL_strlen(org) + SDL_strlen(app) + 3; - char *retval = (char *) SDL_malloc(len); - if (!retval) { - SDL_OutOfMemory(); - } else { - SDL_snprintf(retval, len, "%s%s%s/%s/", home, append, org, app); - create_directory(retval, 0700); // Haiku api: creates missing dirs - } - - return retval; -} - -#endif /* SDL_FILESYSTEM_HAIKU */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/3rdparty/SDL2/src/filesystem/nacl/SDL_sysfilesystem.c b/3rdparty/SDL2/src/filesystem/nacl/SDL_sysfilesystem.c deleted file mode 100644 index ac8fef1e323..00000000000 --- a/3rdparty/SDL2/src/filesystem/nacl/SDL_sysfilesystem.c +++ /dev/null @@ -1,42 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" -#include "SDL_error.h" -#include "SDL_filesystem.h" - -#ifdef SDL_FILESYSTEM_NACL - -char * -SDL_GetBasePath(void) -{ - SDL_Unsupported(); - return NULL; -} - -char * -SDL_GetPrefPath(const char *org, const char *app) -{ - SDL_Unsupported(); - return NULL; -} - -#endif /* SDL_FILESYSTEM_NACL */ - diff --git a/3rdparty/SDL2/src/filesystem/unix/SDL_sysfilesystem.c b/3rdparty/SDL2/src/filesystem/unix/SDL_sysfilesystem.c deleted file mode 100644 index bd2e84cd1c5..00000000000 --- a/3rdparty/SDL2/src/filesystem/unix/SDL_sysfilesystem.c +++ /dev/null @@ -1,229 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -#ifdef SDL_FILESYSTEM_UNIX - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* System dependent filesystem routines */ - -#include <errno.h> -#include <stdio.h> -#include <unistd.h> -#include <stdlib.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <limits.h> - -#if defined(__FREEBSD__) || defined(__OPENBSD__) -#include <sys/sysctl.h> -#endif - -#include "SDL_error.h" -#include "SDL_stdinc.h" -#include "SDL_filesystem.h" - -static char * -readSymLink(const char *path) -{ - char *retval = NULL; - ssize_t len = 64; - ssize_t rc = -1; - - while (1) - { - char *ptr = (char *) SDL_realloc(retval, (size_t) len); - if (ptr == NULL) { - SDL_OutOfMemory(); - break; - } - - retval = ptr; - - rc = readlink(path, retval, len); - if (rc == -1) { - break; /* not a symlink, i/o error, etc. */ - } else if (rc < len) { - retval[rc] = '\0'; /* readlink doesn't null-terminate. */ - return retval; /* we're good to go. */ - } - - len *= 2; /* grow buffer, try again. */ - } - - SDL_free(retval); - return NULL; -} - - -char * -SDL_GetBasePath(void) -{ - char *retval = NULL; - -#if defined(__FREEBSD__) - char fullpath[PATH_MAX]; - size_t buflen = sizeof (fullpath); - const int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1 }; - if (sysctl(mib, SDL_arraysize(mib), fullpath, &buflen, NULL, 0) != -1) { - retval = SDL_strdup(fullpath); - if (!retval) { - SDL_OutOfMemory(); - return NULL; - } - } -#endif -#if defined(__OPENBSD__) - char **retvalargs; - size_t len; - const int mib[] = { CTL_KERN, KERN_PROC_ARGS, getpid(), KERN_PROC_ARGV }; - if (sysctl(mib, 4, NULL, &len, NULL, 0) != -1) { - retvalargs = SDL_malloc(len); - if (!retvalargs) { - SDL_OutOfMemory(); - return NULL; - } - sysctl(mib, 4, retvalargs, &len, NULL, 0); - retval = SDL_malloc(PATH_MAX + 1); - if (retval) - realpath(retvalargs[0], retval); - - SDL_free(retvalargs); - } -#endif -#if defined(__SOLARIS__) - const char *path = getexecname(); - if ((path != NULL) && (path[0] == '/')) { /* must be absolute path... */ - retval = SDL_strdup(path); - if (!retval) { - SDL_OutOfMemory(); - return NULL; - } - } -#endif - - /* is a Linux-style /proc filesystem available? */ - if (!retval && (access("/proc", F_OK) == 0)) { -#if defined(__FREEBSD__) - retval = readSymLink("/proc/curproc/file"); -#elif defined(__NETBSD__) - retval = readSymLink("/proc/curproc/exe"); -#else - retval = readSymLink("/proc/self/exe"); /* linux. */ -#endif - if (retval == NULL) { - /* older kernels don't have /proc/self ... try PID version... */ - char path[64]; - const int rc = (int) SDL_snprintf(path, sizeof(path), - "/proc/%llu/exe", - (unsigned long long) getpid()); - if ( (rc > 0) && (rc < sizeof(path)) ) { - retval = readSymLink(path); - } - } - } - - /* If we had access to argv[0] here, we could check it for a path, - or troll through $PATH looking for it, too. */ - - if (retval != NULL) { /* chop off filename. */ - char *ptr = SDL_strrchr(retval, '/'); - if (ptr != NULL) { - *(ptr+1) = '\0'; - } else { /* shouldn't happen, but just in case... */ - SDL_free(retval); - retval = NULL; - } - } - - if (retval != NULL) { - /* try to shrink buffer... */ - char *ptr = (char *) SDL_realloc(retval, strlen(retval) + 1); - if (ptr != NULL) - retval = ptr; /* oh well if it failed. */ - } - - return retval; -} - -char * -SDL_GetPrefPath(const char *org, const char *app) -{ - /* - * We use XDG's base directory spec, even if you're not on Linux. - * This isn't strictly correct, but the results are relatively sane - * in any case. - * - * http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html - */ - const char *envr = SDL_getenv("XDG_DATA_HOME"); - const char *append; - char *retval = NULL; - char *ptr = NULL; - size_t len = 0; - - if (!envr) { - /* You end up with "$HOME/.local/share/Game Name 2" */ - envr = SDL_getenv("HOME"); - if (!envr) { - /* we could take heroic measures with /etc/passwd, but oh well. */ - SDL_SetError("neither XDG_DATA_HOME nor HOME environment is set"); - return NULL; - } - append = "/.local/share/"; - } else { - append = "/"; - } - - len = SDL_strlen(envr); - if (envr[len - 1] == '/') - append += 1; - - len += SDL_strlen(append) + SDL_strlen(org) + SDL_strlen(app) + 3; - retval = (char *) SDL_malloc(len); - if (!retval) { - SDL_OutOfMemory(); - return NULL; - } - - SDL_snprintf(retval, len, "%s%s%s/%s/", envr, append, org, app); - - for (ptr = retval+1; *ptr; ptr++) { - if (*ptr == '/') { - *ptr = '\0'; - if (mkdir(retval, 0700) != 0 && errno != EEXIST) - goto error; - *ptr = '/'; - } - } - if (mkdir(retval, 0700) != 0 && errno != EEXIST) { -error: - SDL_SetError("Couldn't create directory '%s': '%s'", retval, strerror(errno)); - SDL_free(retval); - return NULL; - } - - return retval; -} - -#endif /* SDL_FILESYSTEM_UNIX */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/3rdparty/SDL2/src/filesystem/windows/SDL_sysfilesystem.c b/3rdparty/SDL2/src/filesystem/windows/SDL_sysfilesystem.c deleted file mode 100644 index fd942d75fa8..00000000000 --- a/3rdparty/SDL2/src/filesystem/windows/SDL_sysfilesystem.c +++ /dev/null @@ -1,182 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -#ifdef SDL_FILESYSTEM_WINDOWS - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* System dependent filesystem routines */ - -#include "../../core/windows/SDL_windows.h" -#include <shlobj.h> - -#include "SDL_assert.h" -#include "SDL_error.h" -#include "SDL_stdinc.h" -#include "SDL_filesystem.h" - -char * -SDL_GetBasePath(void) -{ - typedef DWORD (WINAPI *GetModuleFileNameExW_t)(HANDLE, HMODULE, LPWSTR, DWORD); - GetModuleFileNameExW_t pGetModuleFileNameExW; - DWORD buflen = 128; - WCHAR *path = NULL; - HANDLE psapi = LoadLibrary(L"psapi.dll"); - char *retval = NULL; - DWORD len = 0; - int i; - - if (!psapi) { - WIN_SetError("Couldn't load psapi.dll"); - return NULL; - } - - pGetModuleFileNameExW = (GetModuleFileNameExW_t)GetProcAddress(psapi, "GetModuleFileNameExW"); - if (!pGetModuleFileNameExW) { - WIN_SetError("Couldn't find GetModuleFileNameExW"); - FreeLibrary(psapi); - return NULL; - } - - while (SDL_TRUE) { - void *ptr = SDL_realloc(path, buflen * sizeof (WCHAR)); - if (!ptr) { - SDL_free(path); - FreeLibrary(psapi); - SDL_OutOfMemory(); - return NULL; - } - - path = (WCHAR *) ptr; - - len = pGetModuleFileNameExW(GetCurrentProcess(), NULL, path, buflen); - if (len != buflen) { - break; - } - - /* buffer too small? Try again. */ - buflen *= 2; - } - - FreeLibrary(psapi); - - if (len == 0) { - SDL_free(path); - WIN_SetError("Couldn't locate our .exe"); - return NULL; - } - - for (i = len-1; i > 0; i--) { - if (path[i] == '\\') { - break; - } - } - - SDL_assert(i > 0); /* Should have been an absolute path. */ - path[i+1] = '\0'; /* chop off filename. */ - - retval = WIN_StringToUTF8(path); - SDL_free(path); - - return retval; -} - -char * -SDL_GetPrefPath(const char *org, const char *app) -{ - /* - * Vista and later has a new API for this, but SHGetFolderPath works there, - * and apparently just wraps the new API. This is the new way to do it: - * - * SHGetKnownFolderPath(FOLDERID_RoamingAppData, KF_FLAG_CREATE, - * NULL, &wszPath); - */ - - WCHAR path[MAX_PATH]; - char *retval = NULL; - WCHAR* worg = NULL; - WCHAR* wapp = NULL; - size_t new_wpath_len = 0; - BOOL api_result = FALSE; - - if (!SUCCEEDED(SHGetFolderPathW(NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE, NULL, 0, path))) { - WIN_SetError("Couldn't locate our prefpath"); - return NULL; - } - - worg = WIN_UTF8ToString(org); - if (worg == NULL) { - SDL_OutOfMemory(); - return NULL; - } - - wapp = WIN_UTF8ToString(app); - if (wapp == NULL) { - SDL_free(worg); - SDL_OutOfMemory(); - return NULL; - } - - new_wpath_len = lstrlenW(worg) + lstrlenW(wapp) + lstrlenW(path) + 3; - - if ((new_wpath_len + 1) > MAX_PATH) { - SDL_free(worg); - SDL_free(wapp); - WIN_SetError("Path too long."); - return NULL; - } - - lstrcatW(path, L"\\"); - lstrcatW(path, worg); - SDL_free(worg); - - api_result = CreateDirectoryW(path, NULL); - if (api_result == FALSE) { - if (GetLastError() != ERROR_ALREADY_EXISTS) { - SDL_free(wapp); - WIN_SetError("Couldn't create a prefpath."); - return NULL; - } - } - - lstrcatW(path, L"\\"); - lstrcatW(path, wapp); - SDL_free(wapp); - - api_result = CreateDirectoryW(path, NULL); - if (api_result == FALSE) { - if (GetLastError() != ERROR_ALREADY_EXISTS) { - WIN_SetError("Couldn't create a prefpath."); - return NULL; - } - } - - lstrcatW(path, L"\\"); - - retval = WIN_StringToUTF8(path); - - return retval; -} - -#endif /* SDL_FILESYSTEM_WINDOWS */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/3rdparty/SDL2/src/filesystem/winrt/SDL_sysfilesystem.cpp b/3rdparty/SDL2/src/filesystem/winrt/SDL_sysfilesystem.cpp deleted file mode 100644 index b4caf903770..00000000000 --- a/3rdparty/SDL2/src/filesystem/winrt/SDL_sysfilesystem.cpp +++ /dev/null @@ -1,221 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -/* TODO, WinRT: remove the need to compile this with C++/CX (/ZW) extensions, and if possible, without C++ at all -*/ - -#ifdef __WINRT__ - -extern "C" { -#include "SDL_filesystem.h" -#include "SDL_error.h" -#include "SDL_hints.h" -#include "SDL_stdinc.h" -#include "SDL_system.h" -#include "../../core/windows/SDL_windows.h" -} - -#include <string> -#include <unordered_map> - -using namespace std; -using namespace Windows::Storage; - -extern "C" const wchar_t * -SDL_WinRTGetFSPathUNICODE(SDL_WinRT_Path pathType) -{ - switch (pathType) { - case SDL_WINRT_PATH_INSTALLED_LOCATION: - { - static wstring path; - if (path.empty()) { - path = Windows::ApplicationModel::Package::Current->InstalledLocation->Path->Data(); - } - return path.c_str(); - } - - case SDL_WINRT_PATH_LOCAL_FOLDER: - { - static wstring path; - if (path.empty()) { - path = ApplicationData::Current->LocalFolder->Path->Data(); - } - return path.c_str(); - } - -#if (WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP) || (NTDDI_VERSION > NTDDI_WIN8) - case SDL_WINRT_PATH_ROAMING_FOLDER: - { - static wstring path; - if (path.empty()) { - path = ApplicationData::Current->RoamingFolder->Path->Data(); - } - return path.c_str(); - } - - case SDL_WINRT_PATH_TEMP_FOLDER: - { - static wstring path; - if (path.empty()) { - path = ApplicationData::Current->TemporaryFolder->Path->Data(); - } - return path.c_str(); - } -#endif - - default: - break; - } - - SDL_Unsupported(); - return NULL; -} - -extern "C" const char * -SDL_WinRTGetFSPathUTF8(SDL_WinRT_Path pathType) -{ - typedef unordered_map<SDL_WinRT_Path, string> UTF8PathMap; - static UTF8PathMap utf8Paths; - - UTF8PathMap::iterator searchResult = utf8Paths.find(pathType); - if (searchResult != utf8Paths.end()) { - return searchResult->second.c_str(); - } - - const wchar_t * ucs2Path = SDL_WinRTGetFSPathUNICODE(pathType); - if (!ucs2Path) { - return NULL; - } - - char * utf8Path = WIN_StringToUTF8(ucs2Path); - utf8Paths[pathType] = utf8Path; - SDL_free(utf8Path); - return utf8Paths[pathType].c_str(); -} - -extern "C" char * -SDL_GetBasePath(void) -{ - const char * srcPath = SDL_WinRTGetFSPathUTF8(SDL_WINRT_PATH_INSTALLED_LOCATION); - size_t destPathLen; - char * destPath = NULL; - - if (!srcPath) { - SDL_SetError("Couldn't locate our basepath: %s", SDL_GetError()); - return NULL; - } - - destPathLen = SDL_strlen(srcPath) + 2; - destPath = (char *) SDL_malloc(destPathLen); - if (!destPath) { - SDL_OutOfMemory(); - return NULL; - } - - SDL_snprintf(destPath, destPathLen, "%s\\", srcPath); - return destPath; -} - -extern "C" char * -SDL_GetPrefPath(const char *org, const char *app) -{ - /* WinRT note: The 'SHGetFolderPath' API that is used in Windows 7 and - * earlier is not available on WinRT or Windows Phone. WinRT provides - * a similar API, but SHGetFolderPath can't be called, at least not - * without violating Microsoft's app-store requirements. - */ - - const WCHAR * srcPath = NULL; - WCHAR path[MAX_PATH]; - char *retval = NULL; - WCHAR* worg = NULL; - WCHAR* wapp = NULL; - size_t new_wpath_len = 0; - BOOL api_result = FALSE; - - srcPath = SDL_WinRTGetFSPathUNICODE(SDL_WINRT_PATH_LOCAL_FOLDER); - if ( ! srcPath) { - SDL_SetError("Unable to find a source path"); - return NULL; - } - - if (SDL_wcslen(srcPath) >= MAX_PATH) { - SDL_SetError("Path too long."); - return NULL; - } - SDL_wcslcpy(path, srcPath, SDL_arraysize(path)); - - worg = WIN_UTF8ToString(org); - if (worg == NULL) { - SDL_OutOfMemory(); - return NULL; - } - - wapp = WIN_UTF8ToString(app); - if (wapp == NULL) { - SDL_free(worg); - SDL_OutOfMemory(); - return NULL; - } - - new_wpath_len = SDL_wcslen(worg) + SDL_wcslen(wapp) + SDL_wcslen(path) + 3; - - if ((new_wpath_len + 1) > MAX_PATH) { - SDL_free(worg); - SDL_free(wapp); - SDL_SetError("Path too long."); - return NULL; - } - - SDL_wcslcat(path, L"\\", new_wpath_len + 1); - SDL_wcslcat(path, worg, new_wpath_len + 1); - SDL_free(worg); - - api_result = CreateDirectoryW(path, NULL); - if (api_result == FALSE) { - if (GetLastError() != ERROR_ALREADY_EXISTS) { - SDL_free(wapp); - WIN_SetError("Couldn't create a prefpath."); - return NULL; - } - } - - SDL_wcslcat(path, L"\\", new_wpath_len + 1); - SDL_wcslcat(path, wapp, new_wpath_len + 1); - SDL_free(wapp); - - api_result = CreateDirectoryW(path, NULL); - if (api_result == FALSE) { - if (GetLastError() != ERROR_ALREADY_EXISTS) { - WIN_SetError("Couldn't create a prefpath."); - return NULL; - } - } - - SDL_wcslcat(path, L"\\", new_wpath_len + 1); - - retval = WIN_StringToUTF8(path); - - return retval; -} - -#endif /* __WINRT__ */ |