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

ruby-changes:11815

From: nobu <ko1@a...>
Date: Sun, 17 May 2009 09:48:03 +0900 (JST)
Subject: [ruby-changes:11815] Ruby:r23470 (trunk): * ruby.c (cmdline_options_init): initialize encodings.

nobu	2009-05-17 09:47:49 +0900 (Sun, 17 May 2009)

  New Revision: 23470

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=23470

  Log:
    * ruby.c (cmdline_options_init): initialize encodings.
    * ruby.c (add_modules, require_libraries, process_sflag):
    
    * ruby.c (process_sflag): not process twice.
    
    * ruby.c (moreswitches): get rid of possible overflow.

  Modified files:
    trunk/ChangeLog
    trunk/ruby.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 23469)
+++ ChangeLog	(revision 23470)
@@ -1,3 +1,13 @@
+Sun May 17 09:47:48 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* ruby.c (cmdline_options_init): initialize encodings.
+
+	* ruby.c (add_modules, require_libraries, process_sflag):
+
+	* ruby.c (process_sflag): not process twice.
+
+	* ruby.c (moreswitches): get rid of possible overflow.
+
 Sun May 17 09:31:05 2009  Masaki Suketa  <masaki.suketa@n...>
 
 	* ext/win32ole/win32ole.c (foletypelib_name): should return
Index: ruby.c
===================================================================
--- ruby.c	(revision 23469)
+++ ruby.c	(revision 23470)
@@ -107,6 +107,8 @@
     MEMZERO(opt, *opt, 1);
     init_ids(opt);
     opt->src.enc.index = src_encoding_index;
+    opt->ext.enc.index = -1;
+    opt->intern.enc.index = -1;
     return opt;
 }
 
@@ -451,12 +453,12 @@
 
 
 static void
-add_modules(struct cmdline_options *opt, const char *mod)
+add_modules(VALUE *req_list, const char *mod)
 {
-    VALUE list = opt->req_list;
+    VALUE list = *req_list;
 
     if (!list) {
-	opt->req_list = list = rb_ary_new();
+	*req_list = list = rb_ary_new();
 	RBASIC(list)->klass = 0;
     }
     rb_ary_push(list, rb_obj_freeze(rb_str_new2(mod)));
@@ -466,9 +468,9 @@
 extern VALUE rb_vm_top_self(void);
 
 static void
-require_libraries(struct cmdline_options *opt)
+require_libraries(VALUE *req_list)
 {
-    VALUE list = opt->req_list;
+    VALUE list = *req_list;
     ID require;
     rb_thread_t *th = GET_THREAD();
     rb_block_t *prev_base_block = th->base_block;
@@ -482,16 +484,16 @@
 	VALUE feature = rb_ary_shift(list);
 	rb_funcall2(rb_vm_top_self(), require, 1, &feature);
     }
-    opt->req_list = 0;
+    *req_list = 0;
 
     th->parse_in_eval = prev_parse_in_eval;
     th->base_block = prev_base_block;
 }
 
 static void
-process_sflag(struct cmdline_options *opt)
+process_sflag(int *sflag)
 {
-    if (opt->sflag) {
+    if (*sflag > 0) {
 	long n;
 	VALUE *args;
 	VALUE argv = rb_argv;
@@ -548,22 +550,21 @@
 	while (n--) {
 	    rb_ary_shift(argv);
 	}
+	*sflag = -1;
     }
-    opt->sflag = 0;
 }
 
 NODE *rb_parser_append_print(VALUE, NODE *);
 NODE *rb_parser_while_loop(VALUE, NODE *, int, int);
-static int proc_options(int argc, char **argv, struct cmdline_options *opt, int envopt);
+static long proc_options(long argc, char **argv, struct cmdline_options *opt, int envopt);
 
 static void
 moreswitches(const char *s, struct cmdline_options *opt, int envopt)
 {
-    int argc, i;
+    long argc, i, len;
     char **argv, *p;
     const char *ap = 0;
     VALUE argstr, argary;
-    int len;
 
     while (ISSPACE(*s)) s++;
     if (!*s) return;
@@ -605,7 +606,7 @@
 }
 
 #define NAME_MATCH_P(name, str, len) \
-    ((len) < sizeof(name) && strncmp((str), name, (len)) == 0)
+    ((len) < (int)sizeof(name) && strncmp((str), name, (len)) == 0)
 
 #define UNSET_WHEN(name, bit, str, len)	\
     if (NAME_MATCH_P(name, str, len)) { \
@@ -660,7 +661,7 @@
 }
 
 static void
-set_option_encoding_once(const char *type, VALUE *name, const char *e, int elen)
+set_option_encoding_once(const char *type, VALUE *name, const char *e, long elen)
 {
     VALUE ename;
 
@@ -682,10 +683,10 @@
 #define set_source_encoding_once(opt, e, elen) \
     set_option_encoding_once("source", &opt->src.enc.name, e, elen)
 
-static int
-proc_options(int argc, char **argv, struct cmdline_options *opt, int envopt)
+static long
+proc_options(long argc, char **argv, struct cmdline_options *opt, int envopt)
 {
-    int n, argc0 = argc;
+    long n, argc0 = argc;
     const char *s;
 
     if (argc == 0)
@@ -773,7 +774,7 @@
 	  case 's':
 	    if (envopt) goto noenvopt;
 	    forbid_setid("-s");
-	    opt->sflag = 1;
+	    if (!opt->sflag) opt->sflag = 1;
 	    s++;
 	    goto reswitch;
 
@@ -818,10 +819,10 @@
 	  case 'r':
 	    forbid_setid("-r");
 	    if (*++s) {
-		add_modules(opt, s);
+		add_modules(&opt->req_list, s);
 	    }
 	    else if (argv[1]) {
-		add_modules(opt, argv[1]);
+		add_modules(&opt->req_list, argv[1]);
 		argc--, argv++;
 	    }
 	    break;
@@ -1233,7 +1234,7 @@
     rb_encoding *enc, *lenc;
     const char *s;
     char fbuf[MAXPATHLEN];
-    int i = proc_options(argc, argv, opt, 0);
+    long i = proc_options(argc, argv, opt, 0);
     rb_thread_t *th = GET_THREAD();
     rb_env_t *env = 0;
 
@@ -1350,7 +1351,7 @@
     }
     ruby_init_gems(!(opt->disable & DISABLE_BIT(gems)));
     ruby_set_argv(argc, argv);
-    process_sflag(opt);
+    process_sflag(&opt->sflag);
 
     {
 	/* set eval context */
@@ -1378,7 +1379,7 @@
 	    eenc = lenc;
 	}
 	rb_enc_associate(opt->e_script, eenc);
-	require_libraries(opt);
+	require_libraries(&opt->req_list);
 
 	PREPARE_PARSE_MAIN({
 	    tree = rb_parser_compile_string(parser, opt->script, opt->e_script, 1);
@@ -1413,7 +1414,7 @@
 
     if (!tree) return Qfalse;
 
-    process_sflag(opt);
+    process_sflag(&opt->sflag);
     opt->xflag = 0;
 
     if (opt->safe_level >= 4) {
@@ -1604,7 +1605,7 @@
 	else if (!NIL_P(c)) {
 	    rb_io_ungetbyte(f, c);
 	}
-	require_libraries(opt);	/* Why here? unnatural */
+	require_libraries(&opt->req_list);	/* Why here? unnatural */
     }
     if (opt->src.enc.index >= 0) {
 	enc = rb_enc_from_index(opt->src.enc.index);
@@ -1726,8 +1727,8 @@
     setproctitle("%.*s", (int)i, s);
 #else
 
-    if (i >= origarg.len) {
-	i = origarg.len - 1;
+    if ((size_t)i >= origarg.len) {
+	i = (long)(origarg.len - 1);
     }
 
     memcpy(origarg.argv[0], s, i);
@@ -1737,7 +1738,9 @@
 	char *t = origarg.argv[0] + i;
 	*t = '\0';
 
-	if (i + 1 < origarg.len) memset(t + 1, ' ', origarg.len - i - 1);
+	if ((size_t)(i + 1) < origarg.len) {
+	    memset(t + 1, ' ', origarg.len - i - 1);
+	}
 	for (j = 1; j < origarg.argc; j++) {
 	    origarg.argv[j] = t;
 	}

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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