Ruby 1.9.3p327(2012-11-10revision37606)
|
00001 #include <ruby.h> 00002 static void stub_sysinit(int *argc, char ***argv); 00003 #define ruby_sysinit stub_sysinit 00004 #include <main.c> 00005 #undef ruby_sysinit 00006 00007 void 00008 stub_sysinit(int *argc, char ***argv) 00009 { 00010 char exename[4096]; 00011 size_t lenexe, len0, lenall; 00012 int i, ac; 00013 char **av, *p; 00014 00015 lenexe = (size_t)GetModuleFileName(NULL, exename, sizeof exename); 00016 ruby_sysinit(argc, argv); 00017 ac = *argc; 00018 av = *argv; 00019 len0 = strlen(av[0]) + 1; 00020 lenall = 0; 00021 for (i = 1; i < ac; ++i) { 00022 lenall += strlen(av[i]) + 1; 00023 } 00024 *argv = av = realloc(av, lenall + (lenexe + 1) * 2 + sizeof(char *) * (i + 2)); 00025 *argc = ++ac; 00026 p = (char *)(av + i + 2); 00027 memmove(p + (lenexe + 1) * 2, (char *)(av + ac) + len0, lenall); 00028 memcpy(p, exename, lenexe); 00029 p[lenexe] = '\0'; 00030 *av++ = p; 00031 p += lenexe + 1; 00032 memcpy(p, exename, lenexe); 00033 p[lenexe] = '\0'; 00034 *av++ = p; 00035 p += lenexe + 1; 00036 while (--i) { 00037 *av++ = p; 00038 p += strlen(p) + 1; 00039 } 00040 *av = NULL; 00041 } 00042 00043