cvs commit: src/sys/sys endian.h src/share/man/man9 byteorder.9
Bruce Evans
bde at zeta.org.au
Fri Apr 4 22:55:36 PST 2003
On Fri, 4 Apr 2003, Nate Lawson wrote:
> On Fri, 4 Apr 2003, Ruslan Ermilov wrote:
> > +#define BSWAP16(x) (uint16_t) \
> > + (((x) >> 8) | ((x) << 8))
> > +
> > +#define BSWAP32(x) (uint32_t) \
> > + (((x) >> 24) | (((x) >> 8) & 0xff00) | \
> > + (((x) << 8) & 0xff0000) | ((x) << 24))
> I don't mind the addition of the macros but I don't like the
> implementation. Too many unnecessary casts and overly complicated.
I fear it has not enough necessary casts :-). E.g., if x = (int16_t)0xfffe,
then on 32-bit machines sign extension gives 0xffffffff for BSWAP16(x).
Of course, BSWAP16()'s arg should be precisely uint16_t, but the function
interfaces don't require it to have the correct type except possibly on
non-2's complement machines where coercing the arg's type may cause
surprising changes to the arg's value.
Bruce
More information about the cvs-src
mailing list