diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-09-29 08:45:24 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-09-29 08:45:24 +0000 |
commit | 400202f6a5b5f833b13ecc1b9b9628de05ea27a8 (patch) | |
tree | caf9e474c3c55bae35e661a59cb3d83f6f52dfb5 /ruby.c | |
parent | 43c4d8093074e4d7c2639a7fd81c889739599b4d (diff) | |
download | ruby-400202f6a5b5f833b13ecc1b9b9628de05ea27a8.tar.gz |
* main.c (main): use platform-independent per-process initialization.
[ruby-dev:31900]
* ruby.c (ruby_sysinit): new function for per-process initialization.
* include/ruby/ruby.h (RUBY_GLOBAL_SETUP): toplevel setup declaration.
* include/ruby/win32.h, win32/mkexports.rb: alias NtInitialize
ruby_sysinit.
* win32/win32.c (rb_w32_sysinit): renamed from NtInitialize.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13569 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ruby.c')
-rw-r--r-- | ruby.c | 42 |
1 files changed, 37 insertions, 5 deletions
@@ -47,6 +47,10 @@ # define MAXPATHLEN 1024 #endif +#if defined(__MACOS__) && defined(__MWERKS__) +#include <console.h> +#endif + #include "ruby/util.h" /* for gdb */ @@ -1307,8 +1311,6 @@ ruby_process_options(int argc, char **argv) struct cmdline_options opt; NODE *tree; - origarg.argc = argc; - origarg.argv = argv; MEMZERO(&opt, opt, 1); ruby_script(argv[0]); /* for the time being */ @@ -1316,9 +1318,6 @@ ruby_process_options(int argc, char **argv) #if defined(USE_DLN_A_OUT) dln_argv0 = argv[0]; #endif -#if !defined(PSTAT_SETCMD) && !defined(HAVE_SETPROCTITLE) - origarg.len = get_arglen(origarg.argc, origarg.argv); -#endif tree = process_options(argc, argv, &opt); rb_define_readonly_boolean("$-p", opt.do_print); @@ -1327,3 +1326,36 @@ ruby_process_options(int argc, char **argv) return tree; } + +void +ruby_sysinit(int *argc, char ***argv) +{ +#if defined(__APPLE__) && (defined(__MACH__) || defined(__DARWIN__)) + int i, n = *argc, len = 0; + char **v1 = *argv, **v2, *p; + + for (i = 0; i < n; ++i) { + len += strlen(v1[i]) + 1; + } + v2 = malloc((n + 1)* sizeof(char*) + len); + p = (char *)&v2[n + 1]; + for (i = 0; i < n; ++i) { + int l = strlen(v1[i]); + memcpy(p, v1[i], l + 1); + v2[i] = p; + p += l + 1; + } + v2[n] = 0; + *argv = v2; +#elif defined(__MACOS__) && defined(__MWERKS__) + *argc = ccommand(argv); +#elif defined(_WIN32) + void rb_w32_sysinit(int *argc, char ***argv); + rb_w32_sysinit(argc, argv); +#endif + origarg.argc = *argc; + origarg.argv = *argv; +#if !defined(PSTAT_SETCMD) && !defined(HAVE_SETPROCTITLE) + origarg.len = get_arglen(origarg.argc, origarg.argv); +#endif +} |