Namazu-devel-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: OpenBSD用のpatc h



寺西です。

Yukio USUDA wrote:
> 
> OpenBSD3.4で試したときの結果を送っていませんでした。
> 
> Bochs環境で試しています。
> 自分でインストールせずにBochsのサイトにあった
> インストール済みディスクイメージを使っています。
> kakasi,nkfは入れていません。
> 
> mknmz-9がFAILになるのはBochs環境で実行しているため
> 時間がかかりすぎているせいだと思います。
> 
> パッチ適用後で idxdiff-2がFAILになっているのは
> make checkの最中に日付が変わったためと思われます。

NetBSD を入れた HDD に OpenBSD を入れてためしてみました。
また、野首さんのパッチを見ながら何がまずいのか調べたところ、
次のパッチで make check が ALL PASS するようになりました。

どうやら、 
NmzResult func(xxxx, NmzResult val)
{
    return val;
}

という形の関数の場合、正しい値を返さないようです。
これを
NmzResult func(xxxx, NmzResult src)
{
    NmzResult val = src;

    return val;
}
と書き換えることで、期待した値を返すようになりました。

もちろん OpenBSD がこのような処理にバグがあるわけでは(おそらく)
ありません。(非常に単純なプログラムの場合には、期待した値を
返しています。)
たぶん、Namazu のどこかの処理でスタックやメモリを壊している
バグがあって、OpenBSD の場合このような症状として表面化したの
でしょう。(これも alloca の問題かもしれません。)

根本的な解決にはなっていませんが、下記パッチをあてること自体は
他に悪影響を及ぼすものではありませんので、あてることにします。
これをあてて 2.0.13RC3 をリリースすることにします。

なお、NmzResult func(xxxx, NmzResult src) という形式の関数は、
他にもあるので、念のためもう少し修正するかもしれません。
(make check で全てのテストができているわけではないため)

# cvs diff search.c
Index: search.c
===================================================================
RCS file: /storage/cvsroot/namazu/nmz/search.c,v
retrieving revision 1.86.4.11
diff -u -p -r1.86.4.11 search.c
--- search.c    28 Mar 2004 00:38:22 -0000      1.86.4.11
+++ search.c    4 Apr 2004 14:04:57 -0000
@@ -399,12 +399,14 @@ open_phrase_index_files(FILE **phrase, F
  * FIXME: this function is too long and difficult to understand. (but
works)
  */
 static NmzResult
-do_phrase_search(const char *key, NmzResult val)
+do_phrase_search(const char *key, NmzResult src)
 {
     int i, h = 0;
     char *p, tmpkey[BUFSIZE] = "", *words[QUERY_TOKEN_MAX + 1],
*prevword = NULL;
     FILE *phrase, *phrase_index;
     struct nmz_hitnumlist *pr_hitnum = NULL; /* phrase hitnum */
+    /* FIXME: very ad hoc.(for OpenBSD) */
+    NmzResult val = src;

     strncpy(tmpkey, key, BUFSIZE - 1);
     p = tmpkey;
@@ -1078,10 +1080,12 @@ nmz_search(const char *query)


 NmzResult
-nmz_do_searching(const char *key, NmzResult val)
+nmz_do_searching(const char *key, NmzResult src)
 {
     enum nmz_searchmethod mode;
     char tmpkey[BUFSIZE] = "";
+    /* FIXME: very ad hoc.(for OpenBSD) */
+    NmzResult val = src;

     strncpy(tmpkey, key, BUFSIZE - 1);
-- 
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns@xxxxxxxxxxxxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E