From 0f35b58a2fbae58a20979de77a3a642c42f41899 Mon Sep 17 00:00:00 2001 From: matz Date: Mon, 3 Sep 2001 05:37:42 +0000 Subject: * ruby.c (proc_options): should not alter origargv[]. * ruby.c (set_arg0): long strings for $0 dumped core. * ruby.c (set_arg0): use setprogtitle() if it's available. * io.c (rb_io_popen): accept integer flags as mode. * file.c (rb_find_file_ext): extension table can be supplied from outside. renamed. * eval.c (rb_f_require): replace rb_find_file_noext by rb_find_file_ext. * eval.c (rb_provided): should also check feature without extension. * numeric.c (flo_to_s): do not rely on decimal point to be '.' git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1722 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ruby.c | 79 +++++++++++++++++++++++++++++++++++++----------------------------- 1 file changed, 44 insertions(+), 35 deletions(-) (limited to 'ruby.c') diff --git a/ruby.c b/ruby.c index 482ecddb8d..d3d0c50ae8 100644 --- a/ruby.c +++ b/ruby.c @@ -60,7 +60,7 @@ static VALUE do_split = Qfalse; static char *script; -static int origargc, origarglen; +static int origargc; static char **origargv; static void @@ -667,11 +667,6 @@ proc_options(argc, argv) } } - if (e_script) { - argc++, argv--; - argv[0] = script; - } - if (version) { ruby_show_version(); exit(0); @@ -690,7 +685,9 @@ proc_options(argc, argv) script = "-"; } else { - script = argv[0]; + if (!e_script) { + script = argv[0]; + } if (script[0] == '\0') { script = "-"; } @@ -882,26 +879,13 @@ set_arg0(val, id) { char *s; int i; - int len = origarglen; + static int len; if (origargv == 0) rb_raise(rb_eRuntimeError, "$0 not initialized"); StringValue(val); s = RSTRING(val)->ptr; i = RSTRING(val)->len; -#ifndef __hpux - if (i >= len) { - memcpy(origargv[0], s, len); - origargv[0][len] = '\0'; - } - else { - memcpy(origargv[0], s, i); - s = origargv[0]+i; - *s++ = '\0'; - while (++i < len) - *s++ = ' '; - } - rb_progname = rb_tainted_str_new2(origargv[0]); -#else +#ifdef __hpux if (i >= PST_CLEN) { union pstun j; j.pst_command = s; @@ -916,7 +900,44 @@ set_arg0(val, id) pstat(PSTAT_SETCMD, j, i, 0, 0); } rb_progname = rb_tainted_str_new(s, i); +#elif defined(HAVE_SETPROCTITLE) + setproctitle("%.*s", i, s); + rb_progname = rb_tainted_str_new(s, i); +#else + if (len == 0) { + char *s = origargv[0]; + int i; + + s += strlen(s); + /* See if all the arguments are contiguous in memory */ + for (i = 1; i < origargc; i++) { + if (origargv[i] == s + 1) { + s++; + s += strlen(s); /* this one is ok too */ + } + else { + break; + } + } + len = s - origargv[0]; + } + + if (i >= len) { + i = len; + memcpy(origargv[0], s, i); + origargv[0][i] = '\0'; + } + else { + memcpy(origargv[0], s, i); + s = origargv[0]+i; + *s++ = '\0'; + while (++i < len) + *s++ = ' '; + for (i = 1; i < origargc; i++) + origargv[i] = 0; + } #endif + rb_progname = rb_tainted_str_new2(origargv[0]); } void @@ -1014,19 +1035,7 @@ ruby_process_options(argc, argv) char **argv; { origargc = argc; origargv = argv; -#ifndef __hpux - if (origarglen == 0) { - int i; - char *s = origargv[0]; - s += strlen(s); - /* See if all the arguments are contiguous in memory */ - for (i = 1; i < origargc; i++) { - if (origargv[i] == s + 1) - s += strlen(++s); /* this one is ok too */ - } - origarglen = s - origargv[0]; - } -#endif + ruby_script(argv[0]); /* for the time being */ rb_argv0 = rb_progname; #if defined(USE_DLN_A_OUT) -- cgit v1.2.3