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