まつもと ゆきひろです

In message "[ruby-dev:8489] Re: [PATCH] -s command line option"
    on 99/12/02, nobu.nakada / nifty.ne.jp <nobu.nakada / nifty.ne.jp> writes:

|> |前の process_sflag() って意味あるんでしょうか。
|> 
|> これはなにか理由があってそうしたように思うんですが、思い出せ
|> ません。なんだったかなあ。-x とかと関連してたのかなあ。
|
|  #!.*ruby の後のオプションのためですか。じゃあ取っちゃまずいのか
|な。(^^;

あー、思い出した。インタプリタの引数で -s が指定されたときに
は require で呼ばれたライブラリの中で ARGV に -foo=bar とか
が見えないように先に処理したのでした。で、#! ラインで -s が
指定されたときのためにもう一度。

ですが、必要ないときには2重に処理する必要が無いので、
process_sflagの中で sflag をクリアするようにしましょう。

|  でも load_(stdin|file) から proc_options() が呼ばれるので、
|proc_options() 内では ruby_set_argv() の直後の一回でいいような気
|もするのですが、多分。

load時にproc_optionsが呼ばれるときには

  switch_end:
    if (argv0 == 0) return;

の部分で処理が終了しますので、process_sflagsは呼ばれません。

|  あと、Init_ext() って load_(stdin|file) のたびに呼ばれるようで
|すが、何か static link してある場合何回も呼ばれて大丈夫でしょうか。

これも上述のように (argv0 == 0) で処理が止まるので1度しか呼
ばれないと思います。

|  ついでにもう一個。
|$ cat bug.rb
|#!ruby -v                       # garbage after an option
|$ ruby bug.rb
|ruby 1.5.0 (1999-12-01) [i586-linux]
|ruby: [BUG] Segmentation fault
|Aborted (core dumped)

あ、まずい。私は sprintf の * 指定子が好きでないので(たんな
る趣味)、strncpyで対応します。

                                まつもと ゆきひろ /:|)