X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fendianness.h;h=3de872ac7d592cd8a31ed44ee2833855ea1856a2;hb=a3bb2e86f2640f5d593d00250a627d3dcc9747a2;hp=e5f8009c08dbfb76f4e90738a3c66ea206ff1594;hpb=cdda846b47fae4633ba1084472c982766592ac10;p=wimlib diff --git a/src/endianness.h b/src/endianness.h index e5f8009c..3de872ac 100644 --- a/src/endianness.h +++ b/src/endianness.h @@ -5,99 +5,90 @@ #include "config.h" #include -#ifdef WORDS_BIGENDIAN +/* Watch out for conflicts with ntfs-3g headers... */ #ifndef bswap16 -static inline uint16_t bswap16(uint16_t n) +static inline uint16_t +bswap16(uint16_t n) { return (n << 8) | (n >> 8); } -#endif +#endif /* ifndef bswap16 */ #ifndef bswap32 -static inline uint32_t bswap32(uint32_t n) +static inline uint32_t +bswap32(uint32_t n) { #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) return __builtin_bswap32(n); #else - return (n << 24) | ((n & 0xff00) << 8) | ((n & 0xff0000) >> 8) | + return (n << 24) | ((n & 0xff00) << 8) | ((n & 0xff0000) >> 8) | (n >> 24); #endif } -#endif - +#endif /* ifndef bswap32 */ #ifndef bswap64 -static inline uint64_t bswap64(uint64_t n) +static inline uint64_t +bswap64(uint64_t n) { -#ifdef __GNUC__ +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) return __builtin_bswap64(n); #else - return (n << 56) | ((n & 0xff00) << 40) | ((n & 0xff0000) << 24) | - ((n & 0xff000000) << 8) | ((n & 0xff00000000) >> 8) | - ((n & 0xff0000000000) >> 24) | + return (n << 56) | ((n & 0xff00) << 40) | ((n & 0xff0000) << 24) | + ((n & 0xff000000) << 8) | ((n & 0xff00000000) >> 8) | + ((n & 0xff0000000000) >> 24) | ((n & 0xff000000000000) >> 40) | (n >> 56); #endif } -#endif +#endif /* ifndef bswap64 */ -/* Not in place */ -#define to_le16(n) bswap16(n) -#define to_le32(n) bswap32(n) -#define to_le64(n) bswap64(n) #ifndef _NTFS_ENDIANS_H -#define le16_to_cpu(n) bswap16(n) -#define le32_to_cpu(n) bswap32(n) -#define le64_to_cpu(n) bswap64(n) +# ifdef WORDS_BIGENDIAN +# define le16_to_cpu(n) bswap16(n) +# define le32_to_cpu(n) bswap32(n) +# define le64_to_cpu(n) bswap64(n) +# define cpu_to_le16(n) bswap16(n) +# define cpu_to_le32(n) bswap32(n) +# define cpu_to_le64(n) bswap64(n) +# else +# define cpu_to_le16(n) (n) +# define cpu_to_le32(n) (n) +# define cpu_to_le64(n) (n) +# define le16_to_cpu(n) (n) +# define le32_to_cpu(n) (n) +# define le64_to_cpu(n) (n) +# endif #endif -/* In place */ -#define TO_LE16(n) ((n) = to_le16(n)) -#define TO_LE32(n) ((n) = to_le32(n)) -#define TO_LE64(n) ((n) = to_le64(n)) - -static inline void array_to_le16(uint16_t *p, uint64_t n) +static inline void +array_cpu_to_le32(uint32_t *p, size_t n) { - while (n--) - *p++ = to_le16(*p); + for (size_t i = 0; i < n; i++) + p[i] = cpu_to_le32(p[i]); } -static inline void array_to_le32(uint32_t *p, uint64_t n) + +static inline void +array_le32_to_cpu(uint32_t *p, size_t n) { - while (n--) - *p++ = to_le32(*p); + for (size_t i = 0; i < n; i++) + p[i] = le32_to_cpu(p[i]); } -static inline void array_to_le64(uint64_t *p, uint64_t n) + +static inline void +array_cpu_to_le64(uint64_t *p, size_t n) { - while (n--) - *p++ = to_le64(*p); + for (size_t i = 0; i < n; i++) + p[i] = cpu_to_le64(p[i]); } -#else - -/* Little endian. */ - -/* Not in place */ -#define to_le16(n) (n) -#define to_le32(n) (n) -#define to_le64(n) (n) - -#ifndef _NTFS_ENDIANS_H -#define le16_to_cpu(n) (n) -#define le32_to_cpu(n) (n) -#define le64_to_cpu(n) (n) -#endif - -/* In place */ -#define TO_LE16(n) -#define TO_LE32(n) -#define TO_LE64(n) - -#define array_to_le16(p, n) -#define array_to_le32(p, n) -#define array_to_le64(p, n) - -#endif +static inline void +array_le64_to_cpu(uint64_t *p, size_t n) +{ + for (size_t i = 0; i < n; i++) + p[i] = le64_to_cpu(p[i]); +} #endif /* _WIMLIB_ENDIANNESS_H */