Namazu-devel-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Invaild emphasized problem
安部です。Subject変えました。
On Tue, 22 Aug 2000 19:25:57 +0900
Satoru Takabayashi <satoru-t@xxxxxxxxxxxxxxxxxx> wrote:
> Motoyuki Kasahara <m-kasahr@xxxxxxxxx> wrote:
>
> >ですが、インストールした後でそのライブラリをリンクするときのことを
> >考える場合は、話が複雑になります。 で、今回はこの場合に該当するの
> >ですよね?
>
> ううむ、議論が錯綜していますが、元の問題はそんなに高尚な問題
> ではなくて、
それも問題にしています。というか、そのまま放置するのは
まずいと思います。ただ、この件とstrcasestr()の問題
(この話もややこしいけど)を同時に取り扱ったことで話を
ややこしくしてしまいました。
話を整理するため、ここではライブラリのリンクの件は
おいておきます。
> 「OSによっては libc の strcasecmp が信用できない」
> というだけの問題だったと思います。
このいわゆる「strcasecmp() problem」について:
> 時系列順に追うと、
そもそもの発端は、
Subject: namazu.cgiの出力でキーワード以外が強調表示
[n-users-j 00467]
です。それから、
[n-users-j 00469][n-users-j 00477][n-users-j 00479]
[n-users-j 00480][n-users-j 00492][n-users-j 00500]
[n-users-j 00501][n-users-j 00502][n-users-j 00503]
[n-users-j 00504][n-users-j 00505]
と続いていきますが、ここで
* Solarisのstrcasecmp()の挙動がおかしい
* IRIXやSun OSのman page(英語)を見ると、7bit ASCIIに
しか対応していない
という話が出て来ます。
キーワードの強調はsrc/result.cのemphasize()で処理され
ますが、ここでstrcasestr()が使われていて、そのstrcasestr()
がstrncasecmp()を使った実装になっていました。
次に
Subject: Solarisのstrcasecmp問題
[n-users-j 00611][n-users-j 00614][n-users-j 00616]
[n-devel-j 00585][n-devel-j 00587][n-devel-j 00611]
[n-devel-j 00620][n-devel-j 00626][n-devel-j 00630]
ですが、
> 1. Solaris 2.5 では strcasecmp に日本語の文字列を渡すと、
> 誤った答えを返す、という報告 [n-users-j 00611]
1.1. strcasecmpの問題ではなく、そもそも日本語文字列に
対応していない関数を使っている側の問題では?
by 寺西さん [n-users-j 00614]。
> 2. nmz_strcasecmp を実装し、すべての strcasecmp を
> nmz_strcasecmp に置き換えるという方法で解決 by たかくさん
> [n-users-j 00616]
2.1. strcasecmp()を問題視した上での修正にしか見えない。
nmz_strcasecmp()が日本語向けの処理を行っている
ようには見えないし、比較している文字列は日本語
文字列ではないように見える。そもそもlib/strcasecmp.c
をそのまま使えばよいのでは? by 笠原さん
[n-devel-j 00585]
2.2. 日本語文字列に対応していない関数 = strcasecmp()
だと思ったので実装し直した。lib/strcasecmp.cを
使わなかったのはそれがtolower()を使っていたから。
strcasecmp()の問題はtolower()が原因だと思って
いた。試してみたら、Solaris 7でもlib/strcasecmp.c
はちゃんと動くようだ。日本語文字列を比較する部分
はsrc/result.cに一ヶ所だけある。by 高久さん
[n-devel-j 00587]
補足すると、tolower()の挙動がおかしい環境ではlib/strcasecmp.c
の挙動もおかしくなります。
2.3. やはり日本語向けの処理をしているようには見えない。
EUC-JPでは問題にならないかもしれませんが。by 笠原さん
[n-devel-j 00611]
2.4. nmz_tolower()が作られたのはmknmzの仕様に合わせる
ためという理由もあった。by 安部 [n-devel-j 00620]
> 3. strcasecmp に日本語を渡すのは 1個所だけらしいので、それ
> なら、その部分だけ strcasecmp を使わなければいいのでは、
> という主張 by 安部さん [n-devel-j 00626]
ad-hoc solutionを最小限にしてほしいので、そう書きました。
> 8. 安部さんの解決策。 adhoc_strcasestr をlibnmzut に埋め込む
> あれ? 問題なのは strcasecmp じゃなかったの? [n-devel-j 00684]
だからstrncasecmp()を使わないように実装し直したのですが。
A A
= . . =
V
end
Ryuji Abe