ruby-changes:2078
From: ko1@a...
Date: 29 Sep 2007 17:45:42 +0900
Subject: [ruby-changes:2078] nobu - Ruby:r13569 (trunk): * main.c (main): use platform-independent per-process initialization.
nobu 2007-09-29 17:45:24 +0900 (Sat, 29 Sep 2007) New Revision: 13569 Modified files: trunk/ChangeLog trunk/include/ruby/ruby.h trunk/include/ruby/win32.h trunk/main.c trunk/ruby.c trunk/win32/mkexports.rb trunk/win32/win32.c Log: * 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. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/include/ruby/ruby.h?r1=13569&r2=13568 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/win32/win32.c?r1=13569&r2=13568 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/win32/mkexports.rb?r1=13569&r2=13568 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/include/ruby/win32.h?r1=13569&r2=13568 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ruby.c?r1=13569&r2=13568 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13569&r2=13568 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/main.c?r1=13569&r2=13568 Index: include/ruby/ruby.h =================================================================== --- include/ruby/ruby.h (revision 13568) +++ include/ruby/ruby.h (revision 13569) @@ -958,6 +958,15 @@ static char *dln_libs_to_be_linked[] = { EXTLIB, 0 }; #endif +#if (defined(__APPLE__) || defined(__NeXT__)) && defined(__MACH__) +/* to link startup code with ObjC support */ +#define RUBY_GLOBAL_SETUP static void objcdummyfunction(void) {objc_msgSend();} +#else +#define RUBY_GLOBAL_SETUP +#endif + +void ruby_sysinit(int *, char ***); + #define RUBY_VM 1 /* YARV */ #define HAVE_NATIVETHREAD int is_ruby_native_thread(void); Index: include/ruby/win32.h =================================================================== --- include/ruby/win32.h (revision 13568) +++ include/ruby/win32.h (revision 13569) @@ -204,7 +204,7 @@ #undef isascii #define isascii __isascii #endif -extern void NtInitialize(int *, char ***); +#define NtInitialize ruby_sysinit extern int rb_w32_cmdvector(const char *, char ***); extern rb_pid_t rb_w32_pipe_exec(const char *, const char *, int, int *); extern int flock(int fd, int oper); Index: ChangeLog =================================================================== --- ChangeLog (revision 13568) +++ ChangeLog (revision 13569) @@ -1,3 +1,17 @@ +Sat Sep 29 17:45:22 2007 Nobuyoshi Nakada <nobu@r...> + + * 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. + Sat Sep 29 17:31:04 2007 Yukihiro Matsumoto <matz@r...> * array.c (rb_ary_combination): new method to give all combination Index: win32/win32.c =================================================================== --- win32/win32.c (revision 13568) +++ win32/win32.c (revision 13569) @@ -419,7 +419,7 @@ // Initialization stuff // void -NtInitialize(int *argc, char ***argv) +rb_w32_sysinit(int *argc, char ***argv) { WORD version; Index: win32/mkexports.rb =================================================================== --- win32/mkexports.rb (revision 13568) +++ win32/mkexports.rb (revision 13569) @@ -50,6 +50,7 @@ end end end + syms["NtInitialize"] ||= "ruby_sysinit" if syms["ruby_sysinit"] @syms = syms end Index: main.c =================================================================== --- main.c (revision 13568) +++ main.c (revision 13569) @@ -13,19 +13,8 @@ #undef RUBY_EXPORT #include "ruby/ruby.h" -#if defined(__MACOS__) && defined(__MWERKS__) -#include <console.h> -#endif +RUBY_GLOBAL_SETUP -/* to link startup code with ObjC support */ -#if (defined(__APPLE__) || defined(__NeXT__)) && defined(__MACH__) -static void -objcdummyfunction(void) -{ - objc_msgSend(); -} -#endif - int main(int argc, char **argv, char **envp) { @@ -33,13 +22,8 @@ extern void ruby_set_debug_option(const char *); ruby_set_debug_option(getenv("RUBY_DEBUG")); #endif -#ifdef _WIN32 - NtInitialize(&argc, &argv); -#endif -#if defined(__MACOS__) && defined(__MWERKS__) - argc = ccommand(&argv); -#endif + ruby_sysinit(&argc, &argv); { RUBY_INIT_STACK; ruby_init(); Index: ruby.c =================================================================== --- ruby.c (revision 13568) +++ ruby.c (revision 13569) @@ -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 @@ 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 @@ #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 @@ 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 +} -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml