[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00556] Re: FDclone 2.08f has been released
- Subject: [FDclone-users:00556] Re: FDclone 2.08f has been released
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Thu, 10 Aug 2006 02:16:26 +0900
しらいです。
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 ----
しらい たかし