mirror of https://github.com/encounter/SDL.git
simplify SDL_GetBasePath on windows
- use GetModuleFileName directly (as recommended)
This commit is contained in:
parent
7c140429a8
commit
de711e1685
|
@ -35,39 +35,23 @@
|
||||||
char *
|
char *
|
||||||
SDL_GetBasePath(void)
|
SDL_GetBasePath(void)
|
||||||
{
|
{
|
||||||
typedef DWORD (WINAPI *GetModuleFileNameExW_t)(HANDLE, HMODULE, LPWSTR, DWORD);
|
|
||||||
GetModuleFileNameExW_t pGetModuleFileNameExW;
|
|
||||||
DWORD buflen = 128;
|
DWORD buflen = 128;
|
||||||
WCHAR *path = NULL;
|
WCHAR *path = NULL;
|
||||||
HANDLE psapi = LoadLibrary(TEXT("psapi.dll"));
|
|
||||||
char *retval = NULL;
|
char *retval = NULL;
|
||||||
DWORD len = 0;
|
DWORD len = 0;
|
||||||
int i;
|
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) {
|
while (SDL_TRUE) {
|
||||||
void *ptr = SDL_realloc(path, buflen * sizeof (WCHAR));
|
void *ptr = SDL_realloc(path, buflen * sizeof (WCHAR));
|
||||||
if (!ptr) {
|
if (!ptr) {
|
||||||
SDL_free(path);
|
SDL_free(path);
|
||||||
FreeLibrary(psapi);
|
|
||||||
SDL_OutOfMemory();
|
SDL_OutOfMemory();
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
path = (WCHAR *) ptr;
|
path = (WCHAR *) ptr;
|
||||||
|
|
||||||
len = pGetModuleFileNameExW(GetCurrentProcess(), NULL, path, buflen);
|
len = GetModuleFileName(NULL, path, buflen);
|
||||||
/* if it truncated, then len >= buflen - 1 */
|
/* if it truncated, then len >= buflen - 1 */
|
||||||
/* if there was enough room (or failure), len < buflen - 1 */
|
/* if there was enough room (or failure), len < buflen - 1 */
|
||||||
if (len < buflen - 1) {
|
if (len < buflen - 1) {
|
||||||
|
@ -78,8 +62,6 @@ SDL_GetBasePath(void)
|
||||||
buflen *= 2;
|
buflen *= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
FreeLibrary(psapi);
|
|
||||||
|
|
||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
SDL_free(path);
|
SDL_free(path);
|
||||||
WIN_SetError("Couldn't locate our .exe");
|
WIN_SetError("Couldn't locate our .exe");
|
||||||
|
|
Loading…
Reference in New Issue