Re: [PATCH] 2.4.21-rc1: byteorder.h breaks with __STRICT_ANSI__ defined (trivial)

Daniel Jacobowitz
2003-11-06T21:21:25Z

On Thu, Nov 06, 2003 at 12:05:48PM -0800, David S. Miller wrote:
> On Thu, 06 Nov 2003 22:09:29 +0200
> Martin Schlemmer <azarah@gentoo.org> wrote:
>
> > On Thu, 2003-11-06 at 21:37, David S. Miller wrote:
> > > Let's say that you end up using some inline function
> > > that takes u32 arguments, and internally it uses
> > > u64 types to speed up the calculation or make it more
> > > accurate or something like that.
> >
> > So basically only in cases where the stuff in byteorder.h
> > was not inlined ... ?
>
> No, exactly in the cases where it _IS_ inlined. Imagine
> this:
>
> static inline u32 swab_foo(u32 a, u32 b)
> {
> u64 tmp = ((u64)a<<32) | ((u64)b);
> u32 retval;
>
> retval = compute(tmp);
>
> return retval;
> }
>
> If that's in a kernel header somewhere, and you build with -ansi,
> you lose.

In general the inlines should be __KERNEL__'d anyway. In any case, the
prior art in <linux/types.h> is:

#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
typedef __u64 uint64_t;
typedef __u64 u_int64_t;
typedef __s64 int64_t;
#endif

Or did I miss something at the beginning of this conversation?

[Debian is already using similar patches, which disable the 64-bit
swabbing in __STRICT_ANSI__.]

--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer