Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.
Sign upGitHub is where the world builds software
Millions of developers and companies build, ship, and maintain their software on GitHub — the largest and most advanced development platform in the world.
#include "internal.h" | |
#if defined HAVE_DLADDR | |
#include <dlfcn.h> | |
#endif | |
#if defined HAVE_SYS_PARAM_H | |
#include <sys/param.h> | |
#endif | |
static void* stub_options(int argc, char **argv); | |
#define ruby_options stub_options | |
#include <main.c> | |
#undef ruby_options | |
void * | |
stub_options(int argc, char **argv) | |
{ | |
char xflag[] = "-x"; | |
char *xargv[4] = {NULL, xflag}; | |
char *cmd = argv[0]; | |
void *ret; | |
#if defined __CYGWIN__ || defined _WIN32 | |
/* GetCommandLineW should contain the accessible path, | |
* use argv[0] as is */ | |
#elif defined __linux__ | |
{ | |
char selfexe[MAXPATHLEN]; | |
ssize_t len = readlink("/proc/self/exe", selfexe, sizeof(selfexe)); | |
if (len < 0) { | |
perror("readlink(\"/proc/self/exe\")"); | |
return NULL; | |
} | |
selfexe[len] = '\0'; | |
cmd = selfexe; | |
} | |
#elif defined HAVE_DLADDR | |
{ | |
Dl_info dli; | |
if (!dladdr(stub_options, &dli)) { | |
perror("dladdr"); | |
return NULL; | |
} | |
cmd = (char *)dli.dli_fname; | |
} | |
#endif | |
#ifndef HAVE_SETPROCTITLE | |
/* argc and argv must be the original */ | |
ruby_init_setproctitle(argc, argv); | |
#endif | |
/* set script with -x option */ | |
/* xargv[0] is NULL not to re-initialize setproctitle again */ | |
xargv[2] = cmd; | |
ret = ruby_options(3, xargv); | |
/* set all arguments to ARGV */ | |
ruby_set_argv(argc - 1, argv + 1); | |
return ret; | |
} |