[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freewnn:00229] struct cnv_env 中のjishomaxの初期化
- To: freewnn@tomo.tomo.gr.jp
- Subject: [freewnn:00229] struct cnv_env 中のjishomaxの初期化
- From: sin@XXXX (MOTOKI Sinichi)
- Date: 14 Dec 1999 21:00:19 +0900
- Reply-To: freewnn@tomo.gr.jp
- Sender: sin@XXXX
- User-Agent: T-gnus/6.13.3 (based on Pterodactyl Gnus v0.98) SEMI/1.13.7(粟津) FLIM/1.13.2(笠縫) Emacs/20.4.emcws.19990816(i386-debian-linux-gnu) MULE/4.0 (花宴)
お久しぶりです。元木です。
この数日間 手元で弄っている FreeWnn の挙動が怪しかったので
調べたところアヤシイところを発見しました。
配布状態の FreeWnn では malloc といいつつ calloc しているの
で動作上は問題ないですが気になりましたので...
なにがアヤシイかといいますと、js_connect (do_env.c) から呼
ばれる conn1 (do_env.c) の中で、新しく作成した領域を初期化
するために new_env (do_env.c) しているのですが、new_env 内
で 構造体cnv_env のメンバーである jishomax を初期化していま
せん。
new_env内で sticky も初期化していなので、calloc が 0 で初期
化してくれるのを見込んで、なにもしていないのかも知れません
が、明示的でないのは非常にイヤだったのでパッチを投げておき
ます。
# 0byte 要求されたら 1byte だけ malloc するのも同様にイヤで
# すが :-)
気に入ったら使ってやって下さい。
do_env.c.diff:
new_env 内で sticky と jishomax を明示的に初期化していない
ので明示的に初期化するようにした。
do_dic_env.c.diff:
del_all_dic_in_env 内ですべての辞書を env[eid] 内から外し
ているのに jishomax はそのままなので 0 を入れた。
(でも、この関数を呼んだ後に jishomax を使う箇所は無いはずな
のでいらないかも。)
P.S.
配布状態の FreeWnn では calloc が 0 にしているので動きま
すが、手元の calloc しないバージョンでは 0 クリアされてい
ない領域から数値をとってきてしまいます。
そのため、38141個も辞書を使っていることになったり、偶然前
に解放した cnv_env の領域と重なって、WNN_JISHOTABLE_FULL
になったりと楽しい動作をしてくれました。
sin.
*** do_env.c.orig Tue Dec 14 20:01:40 1999
--- do_env.c Tue Dec 14 20:48:58 1999
***************
*** 225,230 ****
--- 225,232 ----
for(i=0;i<WNN_MAX_FILE_OF_AN_ENV;i++){
(e->file)[i]= -1;
}
+ e->jishomax = 0;
+ e->sticky = 0;
e->fzk_fid = -1; /* Not Loaded */
e->nbun = default_para.n;
*** do_dic_env.c.orig Tue Dec 14 20:00:57 1999
--- do_dic_env.c Tue Dec 14 20:01:30 1999
***************
*** 283,288 ****
--- 283,289 ----
for(i=0;i< max; i++){
dic_table[jisho[i]].body= -1; dic_table[jisho[i]].hindo= -1;
}
+ env[eid]->jishomax = 0;
}