blob: 945acc1a70e8586780a153c8c5a897ed8f0118ce [file] [log] [blame]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <unistd.h>
#include <sys/syslimits.h>
// On Darwin there's this secret fourth argument, 'apple', which is a pointer
// to a string that contains the executable path, like argv[0], but unlike
// argv[0] it can't be changed using exec().
int main(int argc, char *argv[], char *envp[], char *apple[])
{
char *pargv = calloc((PATH_MAX+1), sizeof(char)),
*pappl = calloc((PATH_MAX+1), sizeof(char));
int i;
for (i = 0; envp[i]; i++)
;
// envp[i]==NULL; envp[i+1]==apple[0]==executable_path
assert(envp[i+1] == apple[0]);
// Make sure realpath(argv[0]) == realpath(apple[0]). (realpath resolves
// symlinks.)
realpath(argv[0], pargv);
realpath(apple[0], pappl);
assert(0 == strcmp(pargv, pappl));
return 0;
}