On Thu, 2 Apr 2009, [email protected] wrote:
>
> glibc entriely and use a syscall prototype which works without
> arch-specific wrappers inside the kernel: The offset argument is
> explicitly split into two 32bit values.

Grr. That may make sense on 32-bit architectures, but makes no sense 
what-so-ever on 64-bit ones.

Why not just say that it's two "unsigned long" arguments, and split it by 
"sizeof unsigned long". And then, on 64-bit architectures, the high bits 
can be ignored. You can even get gcc to optimize it all away by doing 
something like

        #define HALF_LONG (BITS_IN_LONG / 2)

        offset = (((loff_t)high << HALF_LONG) << HALF_LONG) | low;

and then gcc should automaticaly notice that shifting up that way is just 
a fancy way of saying "0", and ignore the high bits.

How married are people to this crazy 2x "32 bits" model?

                        Linus
--
To unsubscribe from this list: send the line "unsubscribe linux-api" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to