namazu-dev(ring)


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

Text-ChaSen1-0.11/ChaSen1.c core dumps (NetBSD/sparc)



>                                   Tue Nov 23 22:27:15 1999
>                                            千葉市中央区長洲
>                                                    藤原  誠
>                                                makoto@xxxxx
最近、ここを殆んど読んでいないのに、いきなり投稿してしまいます。
ごめんなさい。

NetBSD-1.4.1/sparc (egcs-1.1.1)
kakasi-2.3.1
chasen1.51
Text-ChaSen1-0.11
namazu-1.9.5
の組合せで動かそうとしています。

作業の内容は自分の覚え用に、次のところに書いています。
http://www.ki.nu/software/namazu/

namazu-1.9 ですが、
--replace option が大変うれしいです。
--allow,--deny が分りやすくてとても便利です。
検索入力・結果画面で青とか赤の色が付いているのも素晴しいです。
(結果の方は特許ものではないかと思ったりします)

さて、この時に、対象譜の一番最後に改行がないものを処理しようと
すると (-c を付けて Chasen を使う時に)
Segmentation 例外になってしまいます。

(gdb) where
#0  0x1015dff0 in memcpy ()
#1  0x101d013c in sget_line ()
#2  0x101d035c in jsgets ()
#3  0x101d0a34 in ?? ()
   from /usr/local/lib/perl5/site_perl/5.005/sparc-netbsd/auto/Text/ChaSen1/ChaSen1.so
#4  0x48254 in Perl_pp_entersub ()
#5  0x85890 in Perl_runops_standard ()
#6  0x5690 in perl_run ()
#7  0x2ac0 in main ()
(gdb) 

添付のような変更をして見たら、直ったのですが、
このような問題は他の方は起きていないのでしょうか。

それともう一つ 直接なまずには関係ない質問ですが、
chasen-sys2.0b6-ipadic1.0.tar.gz
が出ているのに Perl module は用意されていない気がするので
chasen1.51 を使ったのですが、この理解は正しいでしょうか。
それとも ipadic と付いているのは関係ないのでしょうか。

ついでにもう一つ。次のように
Unsuccessful stat on ....
と出るのは何が問題なのでしょうか。

makoto@milano  22:13:16/991123(~/i)> mknmz -e -c \
--replace='s#/amd/tatsumi/export/home/htdocs/software/#http://www.ki.nu/software/'# \
. > ! ~/prep/namazu-list
Unsuccessful stat on filename containing newline at /usr/local/share/namazu/lib/find.pl line 109.
Unsuccessful stat on filename containing newline at /usr/local/share/namazu/lib/find.pl line 109.
Unsuccessful stat on filename containing newline at /usr/local/share/namazu/lib/find.pl line 109.
---
(藤原)
--- Text-ChaSen1-0.11/ChaSen1.c-ooo	Sat Nov 20 09:57:17 1999
+++ Text-ChaSen1-0.11/ChaSen1.c	Tue Nov 23 20:39:42 1999
@@ -74,11 +74,11 @@
   {
     char *lfposc;
     int lfpos;
-    lfposc = strchr(string, '\n') + 1;
+    lfposc = strchr(string, '\n');
     if (lfposc == NULL) {
       lfpos = strlen(string);
     } else {
-      lfpos = (int) (lfposc - string);
+      lfpos = (int) (lfposc - string + 1);
     }
     if (lfpos > bufsize) {
       memcpy(tmp, string, bufsize);
@@ -86,7 +86,12 @@
     } else {
       memcpy(tmp, string, lfpos);
       tmp[lfpos] = '\0';
-      memmove(string, lfposc, strlen(lfposc) + 1);
+      /* take care if missing LF on the last line */
+      if (lfposc == NULL ) {
+	buffer[0] = '\0';	
+	pos = NULL;
+	return NULL;}
+      memmove(string, lfposc + 1 , strlen(lfposc) + 1);
     }
   }