Annotation of embedaddon/iperf/src/portable_endian.h, revision 1.1

1.1     ! misho       1: // "License": Public Domain
        !             2: // I, Mathias Panzenböck, place this file hereby into the public domain. Use it at your own risk for whatever you like.
        !             3: 
        !             4: #ifndef PORTABLE_ENDIAN_H__
        !             5: #define PORTABLE_ENDIAN_H__
        !             6: 
        !             7: #if (defined(_WIN16) || defined(_WIN32) || defined(_WIN64)) && !defined(__WINDOWS__)
        !             8: 
        !             9: #      define __WINDOWS__
        !            10: 
        !            11: #endif
        !            12: 
        !            13: // GLIBC / Linux with endian(3) support, which was added in glibc 2.9.
        !            14: // Intended to support CentOS 6 and newer.
        !            15: #if defined(__linux__) && \
        !            16:     ((__GLIBC__ > 3) || \
        !            17:      (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 9))
        !            18: 
        !            19: #      include <endian.h>
        !            20: 
        !            21: #elif defined(__CYGWIN__)
        !            22: 
        !            23: #      include <endian.h>
        !            24: 
        !            25: #elif defined(__APPLE__)
        !            26: 
        !            27: #      include <libkern/OSByteOrder.h>
        !            28: 
        !            29: #      define htobe16(x) OSSwapHostToBigInt16(x)
        !            30: #      define htole16(x) OSSwapHostToLittleInt16(x)
        !            31: #      define be16toh(x) OSSwapBigToHostInt16(x)
        !            32: #      define le16toh(x) OSSwapLittleToHostInt16(x)
        !            33:  
        !            34: #      define htobe32(x) OSSwapHostToBigInt32(x)
        !            35: #      define htole32(x) OSSwapHostToLittleInt32(x)
        !            36: #      define be32toh(x) OSSwapBigToHostInt32(x)
        !            37: #      define le32toh(x) OSSwapLittleToHostInt32(x)
        !            38:  
        !            39: #      define htobe64(x) OSSwapHostToBigInt64(x)
        !            40: #      define htole64(x) OSSwapHostToLittleInt64(x)
        !            41: #      define be64toh(x) OSSwapBigToHostInt64(x)
        !            42: #      define le64toh(x) OSSwapLittleToHostInt64(x)
        !            43: 
        !            44: #      define __BYTE_ORDER    BYTE_ORDER
        !            45: #      define __BIG_ENDIAN    BIG_ENDIAN
        !            46: #      define __LITTLE_ENDIAN LITTLE_ENDIAN
        !            47: #      define __PDP_ENDIAN    PDP_ENDIAN
        !            48: 
        !            49: #elif defined(__OpenBSD__)
        !            50: 
        !            51: #      include <sys/endian.h>
        !            52: 
        !            53: #      define be16toh(x) betoh16(x)
        !            54: #      define le16toh(x) letoh16(x)
        !            55: 
        !            56: #      define be32toh(x) betoh32(x)
        !            57: #      define le32toh(x) letoh32(x)
        !            58: 
        !            59: #      define be64toh(x) betoh64(x)
        !            60: #      define le64toh(x) letoh64(x)
        !            61: 
        !            62: #elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__)
        !            63: 
        !            64: #      include <sys/endian.h>
        !            65: 
        !            66: #elif defined(__sun) && defined(__SVR4)
        !            67: 
        !            68: #      include <sys/types.h>
        !            69: #      include <netinet/in.h>
        !            70: #      include <inttypes.h>
        !            71: 
        !            72: #      define be64toh(x) ntohll(x)
        !            73: #      define htobe64(x) htonll(x)
        !            74: 
        !            75: #elif defined(__WINDOWS__)
        !            76: 
        !            77: #      include <winsock2.h>
        !            78: #      include <sys/param.h>
        !            79: 
        !            80: #      if BYTE_ORDER == LITTLE_ENDIAN
        !            81: 
        !            82: #              define htobe16(x) htons(x)
        !            83: #              define htole16(x) (x)
        !            84: #              define be16toh(x) ntohs(x)
        !            85: #              define le16toh(x) (x)
        !            86:  
        !            87: #              define htobe32(x) htonl(x)
        !            88: #              define htole32(x) (x)
        !            89: #              define be32toh(x) ntohl(x)
        !            90: #              define le32toh(x) (x)
        !            91:  
        !            92: #              define htobe64(x) htonll(x)
        !            93: #              define htole64(x) (x)
        !            94: #              define be64toh(x) ntohll(x)
        !            95: #              define le64toh(x) (x)
        !            96: 
        !            97: #      elif BYTE_ORDER == BIG_ENDIAN
        !            98: 
        !            99:                /* that would be xbox 360 */
        !           100: #              define htobe16(x) (x)
        !           101: #              define htole16(x) __builtin_bswap16(x)
        !           102: #              define be16toh(x) (x)
        !           103: #              define le16toh(x) __builtin_bswap16(x)
        !           104:  
        !           105: #              define htobe32(x) (x)
        !           106: #              define htole32(x) __builtin_bswap32(x)
        !           107: #              define be32toh(x) (x)
        !           108: #              define le32toh(x) __builtin_bswap32(x)
        !           109:  
        !           110: #              define htobe64(x) (x)
        !           111: #              define htole64(x) __builtin_bswap64(x)
        !           112: #              define be64toh(x) (x)
        !           113: #              define le64toh(x) __builtin_bswap64(x)
        !           114: 
        !           115: #      else
        !           116: 
        !           117: #              error byte order not supported
        !           118: 
        !           119: #      endif
        !           120: 
        !           121: #      define __BYTE_ORDER    BYTE_ORDER
        !           122: #      define __BIG_ENDIAN    BIG_ENDIAN
        !           123: #      define __LITTLE_ENDIAN LITTLE_ENDIAN
        !           124: #      define __PDP_ENDIAN    PDP_ENDIAN
        !           125: 
        !           126: #else
        !           127: 
        !           128: // Unsupported platforms.
        !           129: // Intended to support CentOS 5 but hopefully not too far from
        !           130: // the truth because we use the homebrew htonll, et al. implementations
        !           131: // that were originally the sole implementation of this functionality
        !           132: // in iperf 3.0.
        !           133: #      warning platform not supported
        !           134: #      include <endian.h>
        !           135: #if BYTE_ORDER == BIG_ENDIAN
        !           136: #define HTONLL(n) (n)
        !           137: #define NTOHLL(n) (n)
        !           138: #else
        !           139: #define HTONLL(n) ((((unsigned long long)(n) & 0xFF) << 56) | \
        !           140:                    (((unsigned long long)(n) & 0xFF00) << 40) | \
        !           141:                    (((unsigned long long)(n) & 0xFF0000) << 24) | \
        !           142:                    (((unsigned long long)(n) & 0xFF000000) << 8) | \
        !           143:                    (((unsigned long long)(n) & 0xFF00000000) >> 8) | \
        !           144:                    (((unsigned long long)(n) & 0xFF0000000000) >> 24) | \
        !           145:                    (((unsigned long long)(n) & 0xFF000000000000) >> 40) | \
        !           146:                    (((unsigned long long)(n) & 0xFF00000000000000) >> 56))
        !           147: 
        !           148: #define NTOHLL(n) ((((unsigned long long)(n) & 0xFF) << 56) | \
        !           149:                    (((unsigned long long)(n) & 0xFF00) << 40) | \
        !           150:                    (((unsigned long long)(n) & 0xFF0000) << 24) | \
        !           151:                    (((unsigned long long)(n) & 0xFF000000) << 8) | \
        !           152:                    (((unsigned long long)(n) & 0xFF00000000) >> 8) | \
        !           153:                    (((unsigned long long)(n) & 0xFF0000000000) >> 24) | \
        !           154:                    (((unsigned long long)(n) & 0xFF000000000000) >> 40) | \
        !           155:                    (((unsigned long long)(n) & 0xFF00000000000000) >> 56))
        !           156: #endif
        !           157: 
        !           158: #define htobe64(n) HTONLL(n)
        !           159: #define be64toh(n) NTOHLL(n)
        !           160: 
        !           161: #endif
        !           162: 
        !           163: #endif
        !           164: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>