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
14namespace dart {
15
16inline uint16_t Utils::HostToBigEndian16(uint16_t value) {
17 return htobe16(value);
18}
19
20inline uint32_t Utils::HostToBigEndian32(uint32_t value) {
21 return htobe32(value);
22}
23
24inline uint64_t Utils::HostToBigEndian64(uint64_t value) {
25 return htobe64(value);
26}
27
28inline uint16_t Utils::HostToLittleEndian16(uint16_t value) {
29 return htole16(value);
30}
31
32inline uint32_t Utils::HostToLittleEndian32(uint32_t value) {
33 return htole32(value);
34}
35
36inline uint64_t Utils::HostToLittleEndian64(uint64_t value) {
37 return htole64(value);
38}
39
40inline 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