1 #include "navymail/compat/progexe.h"
2 #include "git-compat-util.h"
5 * Determine path to program executable
6 * (based on example from http://stackoverflow.com/questions/2050961)
10 static char progexe_path
[PATH_MAX
+1];
12 #if defined(__linux__)
13 ssize_t len
= readlink("/proc/self/exe", progexe_path
, PATH_MAX
);
15 die_errno("progexe: Cannot readlink /proc/self/exe");
17 progexe_path
[len
] = '\0';
21 DWORD len
= GetModuleFileNameA(NULL
, progexe_path
, PATH_MAX
);
23 /* TODO use GetLastError here */
24 die("progexe: GetModuleFileNameA(NULL) failed");
26 #elif defined(__APPLE__) /* elif of: #elif defined(__linux__) */
27 /* XXX not tested, TODO cleanup */
28 #include <mach-o/dyld.h>
29 uint32_t pathNameSize
= 0;
31 _NSGetExecutablePath(NULL
, &pathNameSize
);
33 if (pathNameSize
> pathNameCapacity
)
34 pathNameSize
= pathNameCapacity
;
36 if (!_NSGetExecutablePath(pathName
, &pathNameSize
))
40 if (realpath(pathName
, real
) != NULL
)
42 pathNameSize
= strlen(real
);
43 strncpy(pathName
, real
, pathNameSize
);
48 die("progexe: fail on apple"); /* XXX error code ? */
51 #error xprogexe: provide your own implementation