Namazu-devel-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: solaris の strcasecmp 問題
- From: masao@xxxxxxxxxx (Masao Takaku)
- Date: Thu, 22 Jun 2000 16:50:15 +0900 (JST)
- X-ml-name: namazu-devel-ja
- X-mail-count: 00587
たかくです。
すみません。
勝手に修正しておきながら、自分でもちょっと混乱し始めています。
<20000622122903L.m-kasahr@xxxxxxxxxxxxxxxxxx>の記事において
m-kasahr@xxxxxxxxxさんは書きました。
> すみません。以前に ML で話題になったときのことは知らないので外し
以前にMLで話題になったのは、
http://search.namazu.org/ml/namazu-users-ja/msg00466.html
からはじまるスレッドです。
> | trcasecmpの実装の問題ではなく、そもそも日本語文字列に対応して
> | いない関数を使っている側の問題だったのでは?
>
> ということで、寺西さんは strcasecmp() の実装の問題ではない、とい
> うことをおっしゃっているのですよね。
>
> けれども、高久さんが添付されたパッチを拝見すると、新たに
> nmz_strcasecmp() という関数を実装して、strcasecmp() を呼んでいる
> ところを全て nmz_strcasecmp() を呼ぶように変えています。どうも、
> strcasecmp() を問題視した上での修正にしか見えません。
はい、そうなのですが、
私はこの場合、
「日本語文字列に対応していない関数」= strcasecmp()
だと思ったので、nmz_strcasecmp()で実装しなおしました。
# この前提がひょっとしておかしいのでしょうか。
> そもそも、lib/strcasecmp.c をそのまま使えば良いんですよね? なぜ
> もう一つ別の実装が要るのでしょうか。
lib/strcasecmp.c を使わなかった理由は、
lib/strcasecmp.c が tolower() を使っていたからです。
昔、tolower() に日本語文字列を渡すと、
文字化けが起こるという現象があって、nmz_tolower() が作られたので、
今回もnmz_tolower() を通した方が良いと思いました。
というか、
今回の strcasecmp() の現象も tolower() が原因かと勝手に思ってました。
# 昔tolower()の話題が出たのは、
# http://search.namazu.org/ml/namazu-dev/msg01038.html
# からはじまるスレッドです。
今試してみたら、
lib/strcasecmp.c は Solaris7 でもちゃんと動いてますね。
やっぱり、lib/strcasecmp.c を使った方が良いのでしょうか。
ちなみに、
> いずれにしても、ソースコード内で nmz_strcasecmp() を使って比較し
> ている文字列は、いずれも日本語の文字列ではないように見受けられま
src/result.c に一ヶ所だけ、日本語文字列を比較する部分があります。
> それから、パッチ内の nmz_strcasecmp() ですが、char が符合有りの
> 環境で MSB が立っている文字を含んだ文字列を比較させると、大小が
> 逆転してしまうような気がします。ちなみに lib/strcasecmp.c では
>
> | const unsigned char *p1 = (const unsigned char *) s1;
> | const unsigned char *p2 = (const unsigned char *) s2;
>
> としているので、この問題は起きません。
あ、なるほど。気付いていませんでした。すみません。
とりあえず、
今回の修正部分は全部元に戻した方が良いでしょうか。
--
高久 雅生 || Masao Takaku
mailto:masao@xxxxxxxxxx http://cosmo.ulis.ac.jp/~masao/