高橋征義です。 # ruby_m17nの話って ruby-dev でいいんでしょうか? 一昨日CVSから持ってきた ruby_m17n をmakeしようとしたところ、 添付ライブラリ(curses)のmakeに失敗しました。使っているのは FreeBSD 4.2-RELEASEです。 makeした結果は以下のようになります。 (略) compiling curses extmk.rb:356:in `+': failed to convert nil into String (TypeError) from extmk.rb:356:in `create_makefile' from /usr/local/src/ruby/ruby_m17n/ruby/ext/curses/extconf.rb:22 from extmk.rb:614:in `load' from extmk.rb:614:in `extmake' from extmk.rb:688 from extmk.rb:673:in `each' from extmk.rb:673 *** Error code 1 で、ちょっと調べてみたところ、String#rindex がマッチしないにも 関わらず0を返しているようです。それは、string.c の rb_str_rindex(argc, argv, str)の定義の中で、 (略) switch (TYPE(sub)) { case T_REGEXP: rb_m17n_enc_check(str, sub, &enc); if (RREGEXP(sub)->len) { pos = rb_reg_adjust_startpos(sub, str, pos, 1); pos = rb_reg_search(sub, str, pos, 1); pos = str_sublen(str, pos, enc); } if (pos >= 0) return INT2NUM(pos); break; となっているあたりの、 pos = rb_reg_search(sub, str, pos, 1); でposがマイナスになっても、 pos = str_sublen(str, pos, enc); でposが0になるからです。これは、 m17n_encoding(enc)が1ではない場合には、 str_sublen(str, len, enc)の定義より、返り値が0以上に なってしまうため、のようです。だもんで、こんな修正で とりあえずは動くようになります。 --- string.c.org Tue Jun 26 23:59:37 2001 +++ string.c Wed Jun 27 00:14:08 2001 @@ -518,7 +518,7 @@ int len; m17n_encoding *enc; { - if (m17n_mbmaxlen(enc) == 1) return len; + if ((m17n_mbmaxlen(enc) == 1) || (len < 0)) return len; else { char *p = str_ptr(str); char *e = p + len; #これが正しい修正かどうかは実はあんまり分かってません(汗; 高橋征義 (TAKAHASHI Masayoshi) E-mail: maki / open-news.com