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

Re: egcs bug?



筒井です。

<199902081254.VAA18517@ruri.iri.co.jp>の記事において
tsubai@iri.co.jpさんは書きました。

> NFS mount で df の表示がおかしくなる件ですが、OpenBSDのように
> こうすれば直るみたいです。

再びこの件ですが、ふと気づいて define を次のように修正したところ
コード自体は変更しなくても直るみたいです。

--- sys/nfs/xdr_subs.h.orig	Mon Mar  1 22:43:36 1999
+++ sys/nfs/xdr_subs.h	Mon Mar  1 22:48:56 1999
@@ -97,13 +97,13 @@
 	((struct nfsv3_time *)(t))->nfsv3_nsec = htonl((f)->tv_nsec); \
 }
 
-#define	fxdr_hyper(f, t) { \
+#define	fxdr_hyper(f, t) do { \
 	((int32_t *)(t))[_QUAD_HIGHWORD] = ntohl(((int32_t *)(f))[0]); \
 	((int32_t *)(t))[_QUAD_LOWWORD] = ntohl(((int32_t *)(f))[1]); \
-}
-#define	txdr_hyper(f, t) { \
+}while(0)
+#define	txdr_hyper(f, t) do { \
 	((int32_t *)(t))[0] = htonl(((int32_t *)(f))[_QUAD_HIGHWORD]); \
 	((int32_t *)(t))[1] = htonl(((int32_t *)(f))[_QUAD_LOWWORD]); \
-}
+}while(0)
 
 #endif
---

> これって strtod() と同じかな? -O1 なら発現しないし。
> (誰か、どこが ANSI-C 的にいけなかったのかおしえてくれるとうれしい:-)

ということで ANSI-C には反してないけど、

> # きっと txdr_hyper も直さなきゃいけない。

複数行にわたる define は全部 do{}while(0) しなきゃいけない?
---
tsutsui@ceres.dti.ne.jp