Ruby  3.1.4p223 (2023-03-30 revision HEAD)
rubystub.c
1 #include "internal.h"
2 #if defined HAVE_DLADDR
3 #include <dlfcn.h>
4 #endif
5 #if defined HAVE_SYS_PARAM_H
6 #include <sys/param.h>
7 #endif
8 static void* stub_options(int argc, char **argv);
9 #define ruby_options stub_options
10 #include <main.c>
11 #undef ruby_options
12 
13 void *
14 stub_options(int argc, char **argv)
15 {
16  char xflag[] = "-x";
17  char *xargv[4] = {NULL, xflag};
18  char *cmd = argv[0];
19  void *ret;
20 
21 #if defined __CYGWIN__ || defined _WIN32
22  /* GetCommandLineW should contain the accessible path,
23  * use argv[0] as is */
24 #elif defined __linux__
25  {
26  char selfexe[MAXPATHLEN];
27  ssize_t len = readlink("/proc/self/exe", selfexe, sizeof(selfexe));
28  if (len < 0) {
29  perror("readlink(\"/proc/self/exe\")");
30  return NULL;
31  }
32  selfexe[len] = '\0';
33  cmd = selfexe;
34  }
35 #elif defined HAVE_DLADDR
36  {
37  Dl_info dli;
38  if (!dladdr(stub_options, &dli)) {
39  perror("dladdr");
40  return NULL;
41  }
42  cmd = (char *)dli.dli_fname;
43  }
44 #endif
45 
46 #ifndef HAVE_SETPROCTITLE
47  /* argc and argv must be the original */
48  ruby_init_setproctitle(argc, argv);
49 #endif
50 
51  /* set script with -x option */
52  /* xargv[0] is NULL not to re-initialize setproctitle again */
53  xargv[2] = cmd;
54  ret = ruby_options(3, xargv);
55 
56  /* set all arguments to ARGV */
57  ruby_set_argv(argc - 1, argv + 1);
58 
59  return ret;
60 }
void ruby_set_argv(int argc, char **argv)
Sets argv that ruby understands.
Definition: ruby.c:2715
void * ruby_options(int argc, char **argv)
Processes command line arguments and compiles the Ruby source to execute.
Definition: eval.c:109