bug-glibc
[Top][All Lists]
Advanced

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

Bug in bswap_64 macro <bits/byteswap.h>


From: Henk
Subject: Bug in bswap_64 macro <bits/byteswap.h>
Date: Fri, 27 Dec 2002 04:55:16 +0100

Hi,

The __bswap_64 macro fails on my Alpha machine, and may possibly fail on

other 64bits architectures as well...
The macro uses a union which expands to a 16 byte structure, because
"unsigned long int " is of size 8 on a 64-bits machine.

To fix it use "unsigned int" for the __l field, better still use in
bswap_XX fixed size types like __32 __64  .. , or so.

Regards,

Henk

Original bits/byteswap.h macro:

# define __bswap_64(x) \
     (__extension__
      ({ union { __extension__ unsigned long long int __ll;
!!!!! ->                unsigned long int    <-!!!!!!!   __l[2]; } __w,
__r;
         if (__builtin_constant_p (x))
           __r.__ll = __bswap_constant_64(x);
        else
         {
             __w.__ll = (x);
            __r.__l[0] = __bswap_32(__w.__l[1]);
            __r.__l[1] = __bswap_32(__w.__l[0]);
          }
         __r.__ll; }))







reply via email to

[Prev in Thread] Current Thread [Next in Thread]