[前][次][番号順一覧][スレッド一覧]

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

[前][次][番号順一覧][スレッド一覧]