[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00654] Re: 仕切り直します。
- Subject: [FDclone-users:00654] Re: 仕切り直します。
- From: yuji tamura <yuji@isis.ocn.ne.jp>
- Date: Sat, 11 Nov 2006 20:19:03 +0900
こんばんは、田村です。
今日は私一人出勤で、留守番のような格好でしたので、先日の
宿題をやって見ました。やりながら書いたので、
継ぎ継ぎですが、取りあえず報告します。
fd v2.09 で、Mac OSX 10.4.8 純正ターミナルで行いました。
.fd2rc は以下のもので確認しました。
一応特定の関係ない箇所、の変更の確認の場合は、ディレクトリ削除
の上、アーカイブを展開し直してから作業してます。
-----.fd2rc-----
#SORTTYPE=1
UNICODEBUFFER=1
LANGUAGE=""
DEFKCODE=""
INPUTKCODE=""
PTYINKCODE=""
PTYOUTKCODE=""
FNAMEKCODE=""
MESSAGELANG="C"
PAGER=lv
EDITOR=vim
-----.fd2rc-----
On Sat, 21 Oct 2006 23:15:12 +0900, Takashi SHIRAI wrote:
> しらいです。
> ◎検証 1
> browse.c:putname() が怪しそうなので、これをシンプルなもの
> に置換えます。putname() の冒頭に数行変数宣言がありますが、そ
> れに続けて以下の 3 行を追加して下さい。
> calclocate(no);
> cputs2(list[no].name);
> return(0);
> これで、各行のファイル名表示が非常にシンプルなものになりま
> すが、カーソル移動くらいは出来るので、この状況でカーソル移動
> 等を繰返して再現性を確認して下さい。
-----browse.c-----
int putname(list, no, isstandout)
namelist *list;
int no, isstandout;
{
char *buf;
struct tm *tm;
int i, j, col, len, wid, width;
calclocate(no);
cputs2(list[no].name);
return(0);
-----browse.c-----
こうかな?、
これではファイル名が消える現象は現れません。(消えません)
違うと困るので、こちらかな?
-----browse.c-----
int putname(list, no, isstandout)
namelist *list;
int no, isstandout;
calclocate(no);
cputs2(list[no].name);
return(0);
{
char *buf;
struct tm *tm;
int i, j, col, len, wid, width;
-----browse.c-----
こちらはエラーになって止まるので最初ので正解ですか。
[yuji:~/work/FD-2.09test] yuji% make
make -f Makefile.tmp
cc -DDARWIN=1 -O -DFD=2 -c -o browse.o browse.c
browse.c: In function 'putname':
browse.c:1008: error: parse error before 'calclocate'
make[1]: *** [browse.o] Error 1
make: *** [all] Error 2
> ◎検証 2
> カーソル移動だけで実行される関数としてもう一つ有力なのが、
> browse.c:infobar() です。今度はこれを無効にしてみましょう。
> infobar() の冒頭に以下の 1 行を追加して下さい。
> return;
> これで画面最下行の情報表示が無くなりますが、動作には不都合
> ない筈ですので、この状況で再現性の確認をお願いします。
-----browse.c-----
}
static VOID NEAR infobar(VOID_A)
return;
{
char *buf;
struct tm *tm;
int len;
-----browse.c-----
としたら、大量のエラーになったので、
-----browse.c-----
}
return;
static VOID NEAR infobar(VOID_A)
{
char *buf;
struct tm *tm;
int len;
-----browse.c-----
としたのですが、やはりエラーが、
[yuji:~/work/FD-2.09test2] yuji% make
make -f Makefile.tmp
cc -DDARWIN=1 -O -DFD=2 -c -o browse.o browse.c
browse.c:771: error: parse error before 'return'
make[1]: *** [browse.o] Error 1
make: *** [all] Error 2
-----browse.c-----
return(width);
return;
}
static VOID NEAR infobar(VOID_A)
{
char *buf;
struct tm *tm;
int len;
-----browse.c-----
でも無いと。
-----browse.c-----
return;
return(width);
}
static VOID NEAR infobar(VOID_A)
{
char *buf;
struct tm *tm;
int len;
-----browse.c-----
これでも無い。
すみません、無知ですみません、どこに挿入するのでしょうか?
もしかしたら、ここですか?
-----browse.c-----
}
static VOID NEAR infobar(VOID_A)
{
return;
char *buf;
struct tm *tm;
int len;
-----browse.c-----
ここだと、エラー無く、コンパイルが終わり、最下行には
「Wait a minute.」の表示のみがでています。
もしこれで良ければ、ファイル名はやはり消えません。
> ◎検証 1+2
ファイル名が消える現象は起こりません(消えません)。
> ◎検証 3
> malloc2() を一つずつ置換えていって、どの malloc2() を置換
> えたら直るのかを検証しましょう。func.h の最後に以下の一行を
> 追加します。
> #define malloc3(s) malloc(s * 16)
> なので、まずはファイル単位で特定しましょう。MAXPATHLEN の
> 時に行なったのと同じ方法です。#include "func.h" の直後に以下
> の一行を追加します。
> #define malloc2 malloc3
> 怪しそうなファイルから順に適用していって、ファイルが特定出
> 来たら、今度はそのファイルの中の malloc2() を手動で malloc3()
> に書換えていって、場所の特定をして下さい。
> 怪しそうなファイルは browse.c/file.c/kanji.c/dosemu.c 辺り
> でしょうかね。
browse.c から始めましたが、早くも当たりのようです。
-----browse.c-----756 line~
else {
tmp = malloc3(width * 2 + len + 1);
i = Xreadlink(nodospath(path, namep -> name),
tmp, width * 2 + len);
if (i >= 0) {
tmp[i] = '\0';
strncpy3(buf, tmp, &w, len);
}
-----browse.c-----
「/Users/yuji/012345678901234567」以下にて日本語ファイル名
「/Users/yuji/Documents/10 blog」以下にて日本語ファイル名
「/Users/yuji/Documents」以下にて ASCII ファイル名
「/User2/yuji/Documents」以下にて ASCII ファイル名
「/User2/yuji/Documents/10 blog」以下にて日本語ファイル名
が消える事を確認。
-----browse.c-----804line~
buf = malloc3(TD_INFO * KANAWID + 1);
tm = localtime(&(filelist[filepos].st_mtim));
len = putfilename(buf, &(filelist[filepos]), len);
buf[len++] = ' ';
-----browse.c-----
上記と同じくファイル名が消える事を確認。
-----browse.c-----867line~
buf = malloc3(n_lastcolumn * KANAWID + 1);
tm = localtime(&(filelist[filepos].st_mtim));
-----browse.c-----
この部分を変更した時に、ファイル名が消えなくなったようです。
日本語、ASCII ファイル名ともに消えないようです。
(まだ消える事が確認できていません)。
念のため
-----browse.c-----1036line
buf = malloc3(col * KANAWID + 1);
i = (isstandout && fnameofs > 0) ? fnameofs : 0;
wid = width;
i = strncpy3(buf, list[no].name, &width, i);
-----browse.c-----
こちらでは、やはりファイル名が消えるようです。
念のため、「file.c」の
>#include "func.h" の直後に以下の一行を追加します。
> #define malloc2 malloc3
では、ファイル名が消える現象を確認しました。
「kanji.c」、「dosemu.c」
のファイルも試しましたが、ファイルが消える現象は
起こるようです(消えます)。
> ◎検証 4
> 同じことを realloc2() でも行なってみましょう。func.h に追
> 加する一行はこうなります。
> #define realloc3(p, s) realloc(p, s * 16)
> 同様に各ファイルの #include "func.h" の直後に追加する一行
> はこうです。
> #define realloc2 realloc3
browse.c の場合。
「/Users/yuji/012345678901234567」以下にて日本語ファイル名
「/Users/yuji/Documents/10 blog」以下にて日本語ファイル名
「/Users/yuji/Documents」以下にて ASCII ファイル名
「/User2/yuji/Documents」以下にて ASCII ファイル名
「/User2/yuji/Documents/10 blog」以下にて日本語ファイル名
が消える事を確認したが、全体に現象の起こる頻度が少ない、
特に ASCII ファイル名が消える確率が少ない。
file.c の場合、日本語、ASCII ファイル名ともに消える。
kanji.c の場合も、同上(消える)。
dosemu.c の場合。
日本語、ASCII ファイル名ともに消えるが、再現確率が非常に
低い。特に ASCII ファイル名がほとんど消えない。
次を、と思ったら dosemu.c には realloc が一ヶ所しかないんですね、
念のためと思い、realloc2 を realloc3 にして見ましたら、ファイルが消え
なくなってしまいました。おかしいと思い。また元に戻し、
(realloc3 を realloc2 に戻し、#include "func.h" の下に
#define realloc2 realloc3 を追加、して見た所、
やはりファイル名は消えません。??
再現確率が非常に低いのだと思うのですが。
以上報告でした。
---
yuji tamura