21 #include "../../SDL_internal.h"
23 #ifdef SDL_FILESYSTEM_WINDOWS
28 #include "../../core/windows/SDL_windows.h"
39 typedef DWORD (WINAPI *GetModuleFileNameExW_t)(HANDLE, HMODULE, LPWSTR, DWORD);
40 GetModuleFileNameExW_t pGetModuleFileNameExW;
43 HANDLE psapi = LoadLibrary(L
"psapi.dll");
53 pGetModuleFileNameExW = (GetModuleFileNameExW_t)GetProcAddress(psapi,
"GetModuleFileNameExW");
54 if (!pGetModuleFileNameExW) {
61 void *ptr =
SDL_realloc(path, buflen *
sizeof (WCHAR));
71 len = pGetModuleFileNameExW(GetCurrentProcess(),
NULL, path, buflen);
88 for (i = len-1; i > 0; i--) {
89 if (path[i] ==
'\\') {
114 WCHAR path[MAX_PATH];
118 size_t new_wpath_len = 0;
119 BOOL api_result =
FALSE;
129 if (!
SUCCEEDED(SHGetFolderPathW(
NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE,
NULL, 0, path))) {
147 new_wpath_len = lstrlenW(worg) + lstrlenW(wapp) + lstrlenW(path) + 3;
149 if ((new_wpath_len + 1) > MAX_PATH) {
157 lstrcatW(path, L
"\\");
158 lstrcatW(path, worg);
162 api_result = CreateDirectoryW(path,
NULL);
163 if (api_result ==
FALSE) {
164 if (GetLastError() != ERROR_ALREADY_EXISTS) {
171 lstrcatW(path, L
"\\");
172 lstrcatW(path, wapp);
175 api_result = CreateDirectoryW(path,
NULL);
176 if (api_result ==
FALSE) {
177 if (GetLastError() != ERROR_ALREADY_EXISTS) {
183 lstrcatW(path, L
"\\");