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

[FDclone-users:00556] Re: FDclone 2.08f has been released



 しらいです。

In Message-Id <20060810001024.918926.ad6774e5@isis.ocn.ne.jp>
        yuji tamura <yuji@isis.ocn.ne.jp>さんwrites:
> こんばんは、田村です。

> 実はいつもなのですが、私は日本語環境の整備に時間がかかるのです、
> それで以前は、FDのメッセージは英語表記にして、ファイル名表示は
> 日本語にして試行錯誤していたものですから、特にその頃はFDの
> メッセージが化けて読めないとお手上げと言う状況だった記憶がありま
> す。

 んー、では実装しておきましょうか。リクエスト受付は 7 月い
っぱいまでだったんですが。


> ところで、
> >  UNICODEBUFFER=1 にすればテーブルを on memory で持つので多
> > 少は高速化すると思いますが、それでも遅いということでしょうか?
> > もし設定していないようなら試してみて下さい。
> なのですが、これをコメントアウトして、UNICODEBUFFER=1にすると
> 
> Illegal instruction
> 
> とメッセージが出て、起動できないようです、

 んー、FNAMEKCODE に UTF8 系を指定していると、関数の再入が
無限に発生してしまいますね。これは、以下の繰返しによるもので
す。
	1.パス名を解釈しようとする。
	2.パス名の UTF8 を変換しなくちゃ。
	3.変換テーブルを開こう。
	4.変換テーブルのパス名は何だっけ?
	5.とゆー訳で 1. に戻る。
 UTF8 だと、パス名に multibyte 文字が含まれない限りは 3. が
発生しないので再現率は稀ですが、UTF8-mac だと、normalization
用に必ずテーブルが必要になるので、再現率 100% ですね。
 さっきの patch と競合しちゃうので、この bugfix だけ行なっ
た patch を作るのが大変なので、ここまでの全部の patch をまと
めたものを付けておきます。

---- Cut Here ----
diff -u ../old/FD-2.08f/dosdisk.c ./dosdisk.c
--- ../old/FD-2.08f/dosdisk.c	Tue Aug  8 00:00:00 2006
+++ ./dosdisk.c	Wed Aug  9 20:56:34 2006
@@ -944,11 +944,12 @@
 	else strcatdelim2(path, unitblpath, file);
 
 	if ((fd = Xopen(path, O_BINARY | O_RDONLY, 0666)) < 0) fd = -1;
-	else if (!unitblent && sureread(fd, buf, 2) != 2) {
+	else if (unitblent) /*EMPTY*/;
+	else if (sureread(fd, buf, 2) == 2) unitblent = getword(buf, 0);
+	else {
 		Xclose(fd);
 		fd = -1;
 	}
-	else unitblent = getword(buf, 0);
 
 	return(fd);
 }
diff -u ../old/FD-2.08f/kanji.c ./kanji.c
--- ../old/FD-2.08f/kanji.c	Tue Aug  8 00:00:00 2006
+++ ./kanji.c	Thu Aug 10 02:16:26 2006
@@ -165,7 +165,9 @@
 static char *NEAR _kanjiconv __P_((char *, char *, int, int, int, int *, int));
 #endif	/* !_NOKANJICONV */
 
+#ifdef	FD
 int noconv = 0;
+#endif
 #ifndef	_NOKANJIFCONV
 int nokanjifconv = 0;
 char *sjispath = NULL;
@@ -729,12 +731,19 @@
 	if (!unitblpath || !*unitblpath) strcpy(path, file);
 	else strcatdelim2(path, unitblpath, file);
 
+# ifdef	FD
+	noconv++;
+# endif
 	if ((fd = Xopen(path, O_BINARY | O_RDONLY, 0666)) < 0) fd = -1;
-	else if (!unitblent && sureread(fd, buf, 2) != 2) {
+	else if (unitblent) /*EMPTY*/;
+	else if (sureread(fd, buf, 2) == 2) unitblent = getword(buf, 0);
+	else {
 		Xclose(fd);
 		fd = -1;
 	}
-	else unitblent = getword(buf, 0);
+# ifdef	FD
+	noconv--;
+# endif
 
 	return(fd);
 }
diff -u ../old/FD-2.08f/log.c ./log.c
--- ../old/FD-2.08f/log.c	Tue Aug  8 00:00:00 2006
+++ ./log.c	Wed Aug  9 00:43:17 2006
@@ -109,6 +109,7 @@
 char *buf;
 int len;
 {
+	static int logging = 0;
 	lockbuf_t *lck;
 	struct tm *tm;
 	char hbuf[MAXLOGLEN + 1];
@@ -116,6 +117,7 @@
 	u_char uc;
 	int n;
 
+	if (logging) return;
 #ifndef	NOUID
 	if (!getuid()) {
 		n = rootloglevel;
@@ -126,6 +128,7 @@
 	n = loglevel;
 	if (!n || n < lvl) return;
 
+	logging = 1;
 	if ((lck = openlogfile())) {
 		t = time(NULL);
 		tm = localtime(&t);
@@ -148,6 +151,7 @@
 		VOID_C write(lck -> fd, &uc, sizeof(uc));
 		lockclose(lck);
 	}
+	logging = 0;
 #ifndef	NOSYSLOG
 	if (usesyslog && syslogged >= 0) {
 		if (!syslogged) {
---- Cut Here ----

                                               しらい たかし