[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00109] Re: {FreeBSD,OpenBSD}/sparc64, IA64
- Subject: [FDclone-users:00109] Re: {FreeBSD,OpenBSD}/sparc64, IA64
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Mon, 17 Feb 2003 02:50:51 +0900
しらいです。
In Message-Id <8665sp9zhw.wl@archon.local.idaemons.org>
"Akinori MUSHA" <knu@iDaemons.org>さんwrites:
> FreeBSD/sparc64 や OpenBSD/sparc64 で FDclone 2.02a をビルド
> して実行すると、
>
> $ ./fd
> [1] + Stopped (tty input) ./fd
> $ ./fdsh
> [2] + Stopped (tty input) ./fd
>
> のようにバックグラウンドに回されてしまいます。(fdbsh は動いた)
knu さんから remote 環境をお貸しして頂いてこの件は修正完了
しました。まずは patch をつけます。
---- Cut Here ----
diff -u FD-2.02a/system.h ./system.h
--- FD-2.02a/system.h Wed Nov 20 09:44:57 2002
+++ ./system.h Mon Feb 17 02:27:11 2003
@@ -47,15 +47,20 @@
#define Xsigblock(o,m) ((o) = sigblock(m))
#endif /* !USESIGPMASK */
+#ifdef POSIX
+#define gettcpgrp(f, g) (g = tcgetpgrp(f))
+#define settcpgrp(f, g) tcsetpgrp(f, g)
+#else
#ifdef TIOCGPGRP
#define gettcpgrp(f, g) ((ioctl(f, TIOCGPGRP, &g) < 0) ? (g = -1) : g)
#else
-#define gettcpgrp(f, g) (g = tcgetpgrp(f))
+#define gettcpgrp(f, g) (-1)
#endif
#ifdef TIOCSPGRP
#define settcpgrp(f, g) ioctl(f, TIOCSPGRP, &(g))
#else
-#define settcpgrp(f, g) tcsetpgrp(f, g)
+#define settcpgrp(f, g) (-1)
+#endif
#endif
#if !MSDOS
---- Cut Here ----
> i386 や alpha ではこうならず、またOS側に端末周りなどの基本的な
> 部分で arch 間の差があるとも考えにくいので、 FDclone 側に何か
> 原因がある気がしています。
long が 64bits もあったのが敗因でした。ioctl(TIOCGPGRP) で
変数の pointer を指定して値を代入させるのですが、ioctl() 側
では多分 32bits 分の代入しか行なっていないために、64bits サ
イズの変数にはうまく代入出来ていないようです。
bug は bug なのですが、little endian CPU では下 32bits が
同じ値になり、また printf() 等では下 32bits 分しか使われない
ため、おかしな代入値になっていることに気づきにくい状況となっ
ていました。
本質的な対策としては、long ではなくて pid_t にするという対
処にすべきなのですが、上記 patch では場あたり的な対処として、
ioctl() の代わりに tcgetpgrp() 関数を使うようにして逃げてい
ます。
この関数は POSIX 標準関数なので、POSIX OS ではこれを優先し
て使うことにしました。
2.02b での正式な対応としては、この修正に加えて、念のために
pid_t を使うようにしました。
POSIX OS かもしくは waitpid() が実装されている環境では、多
分 pid_t が定義されている筈なので、それ以外の環境でのみ従来
どおり long を用いることにします。
P.S.
ひょっとすると、AIX でも上記 patch が効果あったりはしませ
んか?
しらい たかし