1 | // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 | // for details. All rights reserved. Use of this source code is governed by a |
3 | // BSD-style license that can be found in the LICENSE file. |
4 | |
5 | #ifndef RUNTIME_PLATFORM_UTILS_LINUX_H_ |
6 | #define RUNTIME_PLATFORM_UTILS_LINUX_H_ |
7 | |
8 | #if !defined(RUNTIME_PLATFORM_UTILS_H_) |
9 | #error Do not include utils_linux.h directly; use utils.h instead. |
10 | #endif |
11 | |
12 | #include <endian.h> // NOLINT |
13 | |
14 | namespace dart { |
15 | |
16 | inline uint16_t Utils::HostToBigEndian16(uint16_t value) { |
17 | return htobe16(value); |
18 | } |
19 | |
20 | inline uint32_t Utils::HostToBigEndian32(uint32_t value) { |
21 | return htobe32(value); |
22 | } |
23 | |
24 | inline uint64_t Utils::HostToBigEndian64(uint64_t value) { |
25 | return htobe64(value); |
26 | } |
27 | |
28 | inline uint16_t Utils::HostToLittleEndian16(uint16_t value) { |
29 | return htole16(value); |
30 | } |
31 | |
32 | inline uint32_t Utils::HostToLittleEndian32(uint32_t value) { |
33 | return htole32(value); |
34 | } |
35 | |
36 | inline uint64_t Utils::HostToLittleEndian64(uint64_t value) { |
37 | return htole64(value); |
38 | } |
39 | |
40 | inline char* Utils::StrError(int err, char* buffer, size_t bufsize) { |
41 | #if !defined(__GLIBC__) || \ |
42 | ((_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && !_GNU_SOURCE) |
43 | // Use the XSI version. |
44 | if (strerror_r(err, buffer, bufsize) != 0) { |
45 | snprintf(buffer, bufsize, "%s" , "strerror_r failed" ); |
46 | } |
47 | return buffer; |
48 | #else |
49 | // Use the GNU specific version. |
50 | return strerror_r(err, buffer, bufsize); |
51 | #endif |
52 | } |
53 | |
54 | } // namespace dart |
55 | |
56 | #endif // RUNTIME_PLATFORM_UTILS_LINUX_H_ |
57 | |