diff options
author | isherman@chromium.org <isherman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-28 23:18:21 +0000 |
---|---|---|
committer | isherman@chromium.org <isherman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-28 23:18:21 +0000 |
commit | 0e6f619c41f85776a963a2bfb587ad64675554c4 (patch) | |
tree | dff81415834875ce943e6e4af882d676497d971b /base/sys_byteorder.h | |
parent | dfa08b04cf8ee5a34972379f254061647313e2f0 (diff) | |
download | chromium_src-0e6f619c41f85776a963a2bfb587ad64675554c4.zip chromium_src-0e6f619c41f85776a963a2bfb587ad64675554c4.tar.gz chromium_src-0e6f619c41f85776a963a2bfb587ad64675554c4.tar.bz2 |
Move net/base/sys_byteorder.h to base/sys_byteorder.h
Two motivations:
(1) There are currently clients in src/crypto that need the same logic.
(2) There is soon to be a client in src/chrome/common that needs the 64-bit version of this logic, which is currently inlined in a src/crypto implementation file.
BUG=103480
TEST=compiles
Review URL: http://codereview.chromium.org/8949026
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@115926 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/sys_byteorder.h')
-rw-r--r-- | base/sys_byteorder.h | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/base/sys_byteorder.h b/base/sys_byteorder.h new file mode 100644 index 0000000..9fcdbba --- /dev/null +++ b/base/sys_byteorder.h @@ -0,0 +1,75 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This is a convenience header to pull in the platform-specific +// headers that define functions for byte-order conversion, +// particularly: ntohs(), htons(), ntohl(), htonl(). Prefer including +// this file instead of directly writing the #if / #else, since it +// avoids duplicating the platform-specific selections. +// This header also provides ntohll() and htonll() for byte-order conversion +// for 64-bit integers. + +#ifndef BASE_SYS_BYTEORDER_H_ +#define BASE_SYS_BYTEORDER_H_ + +#include "base/basictypes.h" +#include "build/build_config.h" + +#if defined(OS_WIN) +#include <winsock2.h> +#else +#include <arpa/inet.h> +#endif + +// Include headers to provide byteswap for all platforms. +#if defined(COMPILER_MSVC) +#include <stdlib.h> +#elif defined(OS_MACOSX) +#include <libkern/OSByteOrder.h> +#elif defined(OS_OPENBSD) +#include <sys/endian.h> +#else +#include <byteswap.h> +#endif + + +namespace base { + +// Returns a value with all bytes in |x| swapped, i.e. reverses the endianness. +inline uint64 ByteSwap(uint64 x) { +#if defined(COMPILER_MSVC) + return _byteswap_uint64(x); +#elif defined(OS_MACOSX) + return OSSwapInt64(x); +#elif defined(OS_OPENBSD) + return swap64(x); +#else + return bswap_64(x); +#endif +} + +// Converts the bytes in |x| from network to host order (endianness), and +// returns the result. +inline uint64 ntohll(uint64 x) { +#if defined(ARCH_CPU_LITTLE_ENDIAN) + return ByteSwap(x); +#else + return x; +#endif +} + +// Converts the bytes in |x| from host to network order (endianness), and +// returns the result. +inline uint64 htonll(uint64 x) { +#if defined(ARCH_CPU_LITTLE_ENDIAN) + return ByteSwap(x); +#else + return x; +#endif +} + +} // namespace base + + +#endif // BASE_SYS_BYTEORDER_H_ |