On 09/05/2010 04:11 AM, Elvis Dowson wrote:
Hi,
       More specifically, there is a problem with calls to 
libusb_cpu_to_le16(x) in libusb.h

/** \def libusb_cpu_to_le16
  * \ingroup misc
  * Convert a 16-bit value from host-endian to little-endian format. On
  * little endian systems, this function does nothing. On big endian systems,
  * the bytes are swapped.
  * \param x the host-endian value to convert
  * \returns the value in little-endian byte order
  */
#define libusb_cpu_to_le16(x) ({ \
        union { \
                uint8_t  b8[2]; \
                uint16_t b16; \
        } _tmp; \
        uint16_t _tmp2 = (uint16_t)(x); \
        _tmp.b8[1] = _tmp2>>  8; \
        _tmp.b8[0] = _tmp2&  0xff; \
        _tmp.b16; \
})


That seems horrendous, is that even valid c code? Its better defined as a function, or maybe a preprocessor conditional byteswap... Is it fixed in the libusb10 repo at least?

-Josh

_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
http://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to