Skip to content

Commit

Permalink
Add support for some BSDs and Solaris to SDL_GetBasePath().
Browse files Browse the repository at this point in the history
  • Loading branch information
icculus committed Aug 24, 2013
1 parent f60bcf8 commit 97948ae
Showing 1 changed file with 39 additions and 2 deletions.
41 changes: 39 additions & 2 deletions src/filesystem/unix/SDL_sysfilesystem.c
Expand Up @@ -26,9 +26,14 @@
/* System dependent filesystem routines */

#include <unistd.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>

#ifdef __FREEBSD__
#include <sys/sysctl.h>
#endif

#include "SDL_error.h"
#include "SDL_stdinc.h"
#include "SDL_filesystem.h"
Expand Down Expand Up @@ -73,9 +78,41 @@ SDL_GetBasePath(void)
{
char *retval = NULL;

#if defined(__FREEBSD__)
char fullpath[PATH_MAX];
size_t buflen = sizeof (fullpath);
int mib[4];
mib[0] = CTL_KERN;
mib[1] = KERN_PROC;
mib[2] = KERN_PROC_PATHNAME;
mib[3] = -1;
if (sysctl(mib, 4, fullpath, &buflen, NULL, 0) != -1) {
retval = SDL_strdup(fullpath);
if (!retval) {
SDL_OutOfMemory();
return NULL;
}
}
#elif defined(__SOLARIS__)
const char *path = getexecname();
if ((path != NULL) && (path[0] == '/')) { /* must be absolute path... */
retval = SDL_strdup(fullpath);
if (!retval) {
SDL_OutOfMemory();
return NULL;
}
}
#endif

/* is a Linux-style /proc filesystem available? */
if (access("/proc", F_OK) == 0) {
retval = readSymLink("/proc/self/exe");
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];
Expand Down

0 comments on commit 97948ae

Please sign in to comment.