Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(481)

Side by Side Diff: base/sys_byteorder.h

Issue 16206002: Add more support for FreeBSD (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 header defines cross-platform ByteSwap() implementations for 16, 32 and 5 // This header defines cross-platform ByteSwap() implementations for 16, 32 and
6 // 64-bit values, and NetToHostXX() / HostToNextXX() functions equivalent to 6 // 64-bit values, and NetToHostXX() / HostToNextXX() functions equivalent to
7 // the traditional ntohX() and htonX() functions. 7 // the traditional ntohX() and htonX() functions.
8 // Use the functions defined here rather than using the platform-specific 8 // Use the functions defined here rather than using the platform-specific
9 // functions directly. 9 // functions directly.
10 10
11 #ifndef BASE_SYS_BYTEORDER_H_ 11 #ifndef BASE_SYS_BYTEORDER_H_
12 #define BASE_SYS_BYTEORDER_H_ 12 #define BASE_SYS_BYTEORDER_H_
13 13
14 #include "base/basictypes.h" 14 #include "base/basictypes.h"
15 #include "build/build_config.h" 15 #include "build/build_config.h"
16 16
17 #if defined(OS_WIN) 17 #if defined(OS_WIN)
18 #include <winsock2.h> 18 #include <winsock2.h>
19 #else 19 #else
20 #include <arpa/inet.h> 20 #include <arpa/inet.h>
21 #endif 21 #endif
22 22
23 // Include headers to provide byteswap for all platforms. 23 // Include headers to provide byteswap for all platforms.
24 #if defined(COMPILER_MSVC) 24 #if defined(COMPILER_MSVC)
25 #include <stdlib.h> 25 #include <stdlib.h>
26 #elif defined(OS_MACOSX) 26 #elif defined(OS_MACOSX)
27 #include <libkern/OSByteOrder.h> 27 #include <libkern/OSByteOrder.h>
28 #elif defined(OS_OPENBSD) 28 #elif defined(OS_BSD)
29 #include <sys/endian.h> 29 #include <sys/endian.h>
30 #else 30 #else
31 #include <byteswap.h> 31 #include <byteswap.h>
32 #endif 32 #endif
33 33
34 34
35 namespace base { 35 namespace base {
36 36
37 // Returns a value with all bytes in |x| swapped, i.e. reverses the endianness. 37 // Returns a value with all bytes in |x| swapped, i.e. reverses the endianness.
38 inline uint16 ByteSwap(uint16 x) { 38 inline uint16 ByteSwap(uint16 x) {
39 #if defined(COMPILER_MSVC) 39 #if defined(COMPILER_MSVC)
40 return _byteswap_ushort(x); 40 return _byteswap_ushort(x);
41 #elif defined(OS_MACOSX) 41 #elif defined(OS_MACOSX)
42 return OSSwapInt16(x); 42 return OSSwapInt16(x);
43 #elif defined(OS_OPENBSD) 43 #elif defined(OS_OPENBSD)
44 return swap16(x); 44 return swap16(x);
45 #elif defined(OS_FREEBSD)
46 return bswap16(x);
45 #else 47 #else
46 return bswap_16(x); 48 return bswap_16(x);
47 #endif 49 #endif
48 } 50 }
49 inline uint32 ByteSwap(uint32 x) { 51 inline uint32 ByteSwap(uint32 x) {
50 #if defined(COMPILER_MSVC) 52 #if defined(COMPILER_MSVC)
51 return _byteswap_ulong(x); 53 return _byteswap_ulong(x);
52 #elif defined(OS_MACOSX) 54 #elif defined(OS_MACOSX)
53 return OSSwapInt32(x); 55 return OSSwapInt32(x);
54 #elif defined(OS_OPENBSD) 56 #elif defined(OS_OPENBSD)
55 return swap32(x); 57 return swap32(x);
58 #elif defined(OS_FREEBSD)
59 return bswap32(x);
56 #else 60 #else
57 return bswap_32(x); 61 return bswap_32(x);
58 #endif 62 #endif
59 } 63 }
60 inline uint64 ByteSwap(uint64 x) { 64 inline uint64 ByteSwap(uint64 x) {
61 #if defined(COMPILER_MSVC) 65 #if defined(COMPILER_MSVC)
62 return _byteswap_uint64(x); 66 return _byteswap_uint64(x);
63 #elif defined(OS_MACOSX) 67 #elif defined(OS_MACOSX)
64 return OSSwapInt64(x); 68 return OSSwapInt64(x);
65 #elif defined(OS_OPENBSD) 69 #elif defined(OS_OPENBSD)
66 return swap64(x); 70 return swap64(x);
71 #elif defined(OS_FREEBSD)
72 return bswap64(x);
67 #else 73 #else
68 return bswap_64(x); 74 return bswap_64(x);
69 #endif 75 #endif
70 } 76 }
71 77
72 // Converts the bytes in |x| from host order (endianness) to little endian, and 78 // Converts the bytes in |x| from host order (endianness) to little endian, and
73 // returns the result. 79 // returns the result.
74 inline uint16 ByteSwapToLE16(uint16 x) { 80 inline uint16 ByteSwapToLE16(uint16 x) {
75 #if defined(ARCH_CPU_LITTLE_ENDIAN) 81 #if defined(ARCH_CPU_LITTLE_ENDIAN)
76 return x; 82 return x;
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 return ByteSwap(x); 144 return ByteSwap(x);
139 #else 145 #else
140 return x; 146 return x;
141 #endif 147 #endif
142 } 148 }
143 149
144 } // namespace base 150 } // namespace base
145 151
146 152
147 #endif // BASE_SYS_BYTEORDER_H_ 153 #endif // BASE_SYS_BYTEORDER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698