diff options
author | chai <chaifix@163.com> | 2019-03-19 23:06:27 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2019-03-19 23:06:27 +0800 |
commit | 1497dccd63a84b7ee2b229b1ad9c5c02718f2a78 (patch) | |
tree | f8d1bff50da13e126d08c7345653e002e293202d /Source/3rdParty/SDL2/src/filesystem/windows/SDL_sysfilesystem.c | |
parent | 5e2a973516e0729b225da9de0b03015dc5854ac4 (diff) |
*rename
Diffstat (limited to 'Source/3rdParty/SDL2/src/filesystem/windows/SDL_sysfilesystem.c')
-rw-r--r-- | Source/3rdParty/SDL2/src/filesystem/windows/SDL_sysfilesystem.c | 192 |
1 files changed, 0 insertions, 192 deletions
diff --git a/Source/3rdParty/SDL2/src/filesystem/windows/SDL_sysfilesystem.c b/Source/3rdParty/SDL2/src/filesystem/windows/SDL_sysfilesystem.c deleted file mode 100644 index 5219789..0000000 --- a/Source/3rdParty/SDL2/src/filesystem/windows/SDL_sysfilesystem.c +++ /dev/null @@ -1,192 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2018 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 (!app) { - SDL_InvalidParamError("app"); - return NULL; - } - if (!org) { - org = ""; - } - - 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; - } - - if (*worg) { - 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: */ |