Use SDL_GetBasePath for better portability
This commit is contained in:
parent
61f9dbd95d
commit
effc02ce8e
54
SDL/utils.c
54
SDL/utils.c
@ -1,62 +1,24 @@
|
|||||||
|
#include <SDL2/SDL.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#ifdef __APPLE__
|
|
||||||
#include <mach-o/dyld.h>
|
|
||||||
#endif
|
|
||||||
#ifdef _WIN32
|
|
||||||
#include <direct.h>
|
|
||||||
#include <windows.h>
|
|
||||||
#endif
|
|
||||||
#ifdef __linux__
|
|
||||||
#include <assert.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#endif
|
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
const char *executable_folder(void)
|
const char *executable_folder(void)
|
||||||
{
|
{
|
||||||
static char path[1024] = {0,};
|
static const char *ret = NULL;
|
||||||
if (path[0]) {
|
if (!ret) {
|
||||||
return path;
|
ret = SDL_GetBasePath();
|
||||||
}
|
if (!ret) {
|
||||||
/* Ugly unportable code! :( */
|
ret = "./";
|
||||||
#ifdef __APPLE__
|
|
||||||
unsigned int length = sizeof(path) - 1;
|
|
||||||
_NSGetExecutablePath(&path[0], &length);
|
|
||||||
#else
|
|
||||||
#ifdef __linux__
|
|
||||||
ssize_t __attribute__((unused)) length = readlink("/proc/self/exe", &path[0], sizeof(path) - 1);
|
|
||||||
assert (length != -1);
|
|
||||||
#else
|
|
||||||
#ifdef _WIN32
|
|
||||||
HMODULE hModule = GetModuleHandle(NULL);
|
|
||||||
GetModuleFileName(hModule, path, sizeof(path) - 1);
|
|
||||||
#else
|
|
||||||
/* No OS-specific way, assume running from CWD */
|
|
||||||
getcwd(&path[0], sizeof(path) - 1);
|
|
||||||
return path;
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
size_t pos = strlen(path);
|
|
||||||
while (pos) {
|
|
||||||
pos--;
|
|
||||||
#ifdef _WIN32
|
|
||||||
if (path[pos] == '\\') {
|
|
||||||
#else
|
|
||||||
if (path[pos] == '/') {
|
|
||||||
#endif
|
|
||||||
path[pos] = 0;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return path;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *executable_relative_path(const char *filename)
|
char *executable_relative_path(const char *filename)
|
||||||
{
|
{
|
||||||
static char path[1024];
|
static char path[1024];
|
||||||
snprintf(path, sizeof(path), "%s/%s", executable_folder(), filename);
|
snprintf(path, sizeof(path), "%s%s", executable_folder(), filename);
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user