なかだです。 At Sat, 12 Aug 2006 20:19:27 +0900, arton wrote in [ruby-dev:29262]: > > $0への代入がまずいんでしょうか。 > パッチをためしてみました。 > 1.8.5-preview3で、そのままでは現象が再現し、パッチ適用後に解決することを > 確認しました。 その後もうひとつ思い付いたことがあります。 今のところ、$0に代入された文字列をargv[0]にセットした後でargvの 残りはNULLでうめています。もしかしたら、memcmp()に渡されている のはこれかもしれません。 以下のパッチも試してみてもらえますか。 > ただし、こちらの環境(OS X 10.4.7 PPC G4 というか何を見ればいいのかな?) > では、__MacOS_X__は未定義だったので > -#if defined(_WIN32) || defined(__MacOS_X__) > +#if defined(_WIN32) || defined(__APPLE__) && defined(__MACH__) > としました。 すいません、これは間違いでした。__MacOS_X__というのはprocess.c で使っているマクロなんですが、次のように自前で定義しているもの でした。ですから、__APPLE__&__MACH__という条件は正しいはずです。 #if defined(__APPLE__) && ( defined(__MACH__) || defined(__DARWIN__) ) && !defined(__MacOS_X__) #define __MacOS_X__ 1 #endif * ruby.c (set_arg0): fill argv other than the first with an empty string instead of NULL.
Index: ruby.c =================================================================== RCS file: /cvs/ruby/src/ruby/ruby.c,v retrieving revision 1.83.2.13 diff -p -U 2 -r1.83.2.13 ruby.c --- ruby.c 1 Feb 2006 13:27:47 -0000 1.83.2.13 +++ ruby.c 12 Aug 2006 13:22:53 -0000 @@ -1066,16 +1066,11 @@ set_arg0(val, id) 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; } + memcpy(origargv[0], s, i); + s = origargv[0] + i; + *s = '\0'; + if (++i < len) memset(s + 1, ' ', len - i); + for (i = 1; i < origargc; i++) + origargv[i] = s; rb_progname = rb_tainted_str_new2(origargv[0]); #endif
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦