From 536e266e58e6fda550e781d7a88317fdfe149cfa Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 9 Nov 2010 22:20:12 +0000 Subject: * cygwin/GNUmakefile.in (scriptbin): make executable file from scripts with stub. * ruby.c (load_file_internal): assume xflag for exe file as well as no-shebang file. * tool/rbinstall.rb: install script programs. * win32/mkexports.rb (Exports#initialize): alias ruby_sysinit for stub. * win32/stub.c: stub for scripts. [EXPERIMENTAL] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29738 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- win32/stub.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 win32/stub.c (limited to 'win32/stub.c') diff --git a/win32/stub.c b/win32/stub.c new file mode 100644 index 0000000000..fc82d73e2c --- /dev/null +++ b/win32/stub.c @@ -0,0 +1,42 @@ +#include +static void stub_sysinit(int *argc, char ***argv); +#define ruby_sysinit stub_sysinit +#include +#undef ruby_sysinit + +void +stub_sysinit(int *argc, char ***argv) +{ + char exename[4096]; + size_t lenexe, len0, lenall; + int i, ac; + char **av, *p; + + lenexe = (size_t)GetModuleFileName(NULL, exename, sizeof exename); + ruby_sysinit(argc, argv); + ac = *argc; + av = *argv; + len0 = strlen(av[0]) + 1; + lenall = 0; + for (i = 1; i < ac; ++i) { + lenall += strlen(av[i]) + 1; + } + *argv = av = realloc(av, lenall + (lenexe + 1) * 2 + sizeof(char *) * (i + 2)); + *argc = ++ac; + p = (char *)(av + i + 2); + memmove(p + (lenexe + 1) * 2, (char *)(av + ac) + len0, lenall); + memcpy(p, exename, lenexe); + p[lenexe] = '\0'; + *av++ = p; + p += lenexe + 1; + memcpy(p, exename, lenexe); + p[lenexe] = '\0'; + *av++ = p; + p += lenexe + 1; + while (--i) { + *av++ = p; + p += strlen(p) + 1; + } + *av = NULL; +} + -- cgit v1.2.3