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

[FDclone-users:00983] Re: カスタマイザでセーブ時に malloc() エラー



 しらいです。

In Message-Id <20120630.130309.353133235512808263.tatyana@miko.org>
        Takanori Yamamoto <tatyana@miko.org>さんwrites:
> Customizer ('E') から結果を Save した際、コンソールに malloc() と表示され
> プログラムが強制終了してしまうことがあるようです。

 この patch でどうでしょう?

---- Cut Here ----
diff -ur ../old/FD-3.00l/custom.c ./custom.c
--- ../old/FD-3.00l/custom.c	Sat Jun 30 00:00:00 2012
+++ ./custom.c	Sat Jun 30 17:26:11 2012
@@ -4004,11 +4004,10 @@
 	char *new;
 	int i, j, n;
 
-	if (origflaglist) new = NULL;
+	if (origflaglist || origmaxfdtype <= 0) new = NULL;
 	else {
-		for (n = 0; n < origmaxfdtype; n++) /*EMPTY*/;
-		origflaglist = new = Xmalloc(n * sizeof(char));
-		memset(origflaglist, 0, n * sizeof(char));
+		origflaglist = new = Xmalloc(origmaxfdtype * sizeof(char));
+		memset(origflaglist, 0, origmaxfdtype * sizeof(char));
 	}
 
 	for (i = n = 0; i < maxfdtype; i++) {
---- Cut Here ----


> dumpdosdrive から size=0 として Xmalloc が呼ばれています。

 origmaxfdtype が 0 になる OS だとこの症状になりますね。殆
んどの OS については、dosdisk.c の drive letter を羅列してい
る箇所で某かの entry があるので 0 にはなりません。
 例えば Darwin とか i386 環境以外の NetBSD とかだと、この配
列が空になって origmaxfdtype = 0 になります。大抵は FDD を登
録するんですが、Darwin だと USB-FDD しか無さそうですね。
 手元にある検証環境の中ではレアケースだったので、今まで全然
気づいていませんでした。

 dumpdosdrive() 以外の項目に関しては、既定値の設定が空にな
ることがない筈ですが、念の為に同様の措置をしておくことにしま
す。


> 気がつきませんでしたが FD 3.00k でも問題が生じるようです。

 多分相当昔からじゃないでしょうか。2.05 辺りで既定値と設定
値の差分のみ出力するように手を加えたので、その頃に embug し
たんだと思います。
 他にも bug が潜在していそうなので、3.01 の前にもう一回だけ
revision up した方がいいかも知れませんね。既に 3.01 の開発に
着手してるので、bug 報告はお早めにお願いします。

                                               しらい たかし