| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // This is a convenience header to pull in the platform-specific | 5 // This is a convenience header to pull in the platform-specific |
| 6 // headers that define functions for byte-order conversion, | 6 // headers that define functions for byte-order conversion, |
| 7 // particularly: ntohs(), htons(), ntohl(), htonl(). Prefer including | 7 // particularly: ntohs(), htons(), ntohl(), htonl(). Prefer including |
| 8 // this file instead of directly writing the #if / #else, since it | 8 // this file instead of directly writing the #if / #else, since it |
| 9 // avoids duplicating the platform-specific selections. | 9 // avoids duplicating the platform-specific selections. |
| 10 // This header also provides ntohll() and htonll() for byte-order conversion | 10 // This header also provides ntohll() and htonll() for byte-order conversion |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 #elif defined(OS_OPENBSD) | 30 #elif defined(OS_OPENBSD) |
| 31 #include <sys/endian.h> | 31 #include <sys/endian.h> |
| 32 #else | 32 #else |
| 33 #include <byteswap.h> | 33 #include <byteswap.h> |
| 34 #endif | 34 #endif |
| 35 | 35 |
| 36 | 36 |
| 37 namespace base { | 37 namespace base { |
| 38 | 38 |
| 39 // Returns a value with all bytes in |x| swapped, i.e. reverses the endianness. | 39 // Returns a value with all bytes in |x| swapped, i.e. reverses the endianness. |
| 40 inline uint16 ByteSwap(uint16 x) { |
| 41 #if defined(COMPILER_MSVC) |
| 42 return _byteswap_ushort(x); |
| 43 #elif defined(OS_MACOSX) |
| 44 return OSSwapInt16(x); |
| 45 #elif defined(OS_OPENBSD) |
| 46 return swap16(x); |
| 47 #else |
| 48 return bswap_16(x); |
| 49 #endif |
| 50 } |
| 51 inline uint32 ByteSwap(uint32 x) { |
| 52 #if defined(COMPILER_MSVC) |
| 53 return _byteswap_ulong(x); |
| 54 #elif defined(OS_MACOSX) |
| 55 return OSSwapInt32(x); |
| 56 #elif defined(OS_OPENBSD) |
| 57 return swap32(x); |
| 58 #else |
| 59 return bswap_32(x); |
| 60 #endif |
| 61 } |
| 40 inline uint64 ByteSwap(uint64 x) { | 62 inline uint64 ByteSwap(uint64 x) { |
| 41 #if defined(COMPILER_MSVC) | 63 #if defined(COMPILER_MSVC) |
| 42 return _byteswap_uint64(x); | 64 return _byteswap_uint64(x); |
| 43 #elif defined(OS_MACOSX) | 65 #elif defined(OS_MACOSX) |
| 44 return OSSwapInt64(x); | 66 return OSSwapInt64(x); |
| 45 #elif defined(OS_OPENBSD) | 67 #elif defined(OS_OPENBSD) |
| 46 return swap64(x); | 68 return swap64(x); |
| 47 #else | 69 #else |
| 48 return bswap_64(x); | 70 return bswap_64(x); |
| 49 #endif | 71 #endif |
| 50 } | 72 } |
| 51 | 73 |
| 52 // Converts the bytes in |x| from network to host order (endianness), and | 74 // Converts the bytes in |x| from network to host order (endianness), and |
| 53 // returns the result. | 75 // returns the result. |
| 54 inline uint64 ntohll(uint64 x) { | 76 inline uint16 NetToHost16(uint16 x) { |
| 55 #if defined(ARCH_CPU_LITTLE_ENDIAN) | 77 #if defined(ARCH_CPU_LITTLE_ENDIAN) |
| 56 return ByteSwap(x); | 78 return ByteSwap(x); |
| 57 #else | 79 #else |
| 80 return x; |
| 81 #endif |
| 82 } |
| 83 inline uint32 NetToHost32(uint32 x) { |
| 84 #if defined(ARCH_CPU_LITTLE_ENDIAN) |
| 85 return ByteSwap(x); |
| 86 #else |
| 87 return x; |
| 88 #endif |
| 89 } |
| 90 inline uint64 NetToHost64(uint64 x) { |
| 91 #if defined(ARCH_CPU_LITTLE_ENDIAN) |
| 92 return ByteSwap(x); |
| 93 #else |
| 58 return x; | 94 return x; |
| 59 #endif | 95 #endif |
| 60 } | 96 } |
| 61 | 97 |
| 62 // Converts the bytes in |x| from host to network order (endianness), and | 98 // Converts the bytes in |x| from host to network order (endianness), and |
| 63 // returns the result. | 99 // returns the result. |
| 64 inline uint64 htonll(uint64 x) { | 100 inline uint16 HostToNet16(uint16 x) { |
| 65 #if defined(ARCH_CPU_LITTLE_ENDIAN) | 101 #if defined(ARCH_CPU_LITTLE_ENDIAN) |
| 66 return ByteSwap(x); | 102 return ByteSwap(x); |
| 67 #else | 103 #else |
| 104 return x; |
| 105 #endif |
| 106 } |
| 107 inline uint32 HostToNet32(uint32 x) { |
| 108 #if defined(ARCH_CPU_LITTLE_ENDIAN) |
| 109 return ByteSwap(x); |
| 110 #else |
| 111 return x; |
| 112 #endif |
| 113 } |
| 114 inline uint64 HostToNet64(uint64 x) { |
| 115 #if defined(ARCH_CPU_LITTLE_ENDIAN) |
| 116 return ByteSwap(x); |
| 117 #else |
| 68 return x; | 118 return x; |
| 69 #endif | 119 #endif |
| 70 } | 120 } |
| 71 | 121 |
| 72 } // namespace base | 122 } // namespace base |
| 73 | 123 |
| 74 | 124 |
| 75 #endif // BASE_SYS_BYTEORDER_H_ | 125 #endif // BASE_SYS_BYTEORDER_H_ |
| OLD | NEW |