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

[FDclone-users:00665] Re: Linux 2.6.18 で dosdisk.c コンパイルエラー (_syscall5 マクロ)



 しらいです。

In Message-Id <061209163656.M0132555@mix.syd.odn.ne.jp>
        <hma@syd.odn.ne.jp>さんwrites:
> 濱崎です。

> _FILE_OFFSET_BITS=64 なら、USELLSEEK を無効にしてもいいんでしょうか?

 _FILE_OFFSET_BITS が「定義されていること」と「有効であるこ
と」とは別の話です。定義すれば何でも有効になるんだったら嬉し
いんですけどねー。「バグがない」とか「大金持ち」とか。
 定義されているか否かの判別は簡単ですけど、有効か否かの判別
は困難です。実際に 64bits 長の offset 値が扱えるのかどうかは、
少なくとも compile 時には判らないでしょうね。
 configure で判別するという手もあるかも知れませんが、実際に
2GB 超のファイルを作って確認するなんてのは非現実的ですよね。


> 対処として合っていますか?

 USELLSEEK を #undef しても何の解決にもなっていないので、現
行で考えられる対処は __KERNEL__ の定義しかないと思います。

---- Cut Here ----
diff -u ../old/FD-2.09a/dosdisk.c ./dosdisk.c
--- ../old/FD-2.09a/dosdisk.c	Tue Oct 31 00:00:00 2006
+++ ./dosdisk.c	Fri Dec  8 22:26:52 2006
@@ -10,8 +10,14 @@
 #include <errno.h>
 #include <fcntl.h>
 
+#ifdef	USELLSEEK
+#define	__KERNEL__
+#endif
 #ifndef	NOUNISTDH
 #include <unistd.h>
+#endif
+#ifdef	USELLSEEK
+#undef	__KERNEL__
 #endif
 
 #ifndef	NOSTDLIBH
---- Cut Here ----

 別解としては man page にあるという syscall(2) を使うという
手なんでしょうが、その記述ではどういう手順で使うことになって
いますか?
 syscall(2) は下手に使うと library 依存になったりして、全て
の Linux で有効なコードを書くのは難しいんですよ。

                                               しらい たかし