1//===----------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef _LIBCPP_CONFIG_ELAST
10#define _LIBCPP_CONFIG_ELAST
11
12#include <__config>
13
14#if defined(_LIBCPP_MSVCRT_LIKE)
15# include <stdlib.h>
16#else
17# include <errno.h>
18#endif
19
20// Note: _LIBCPP_ELAST needs to be defined only on platforms
21// where strerror/strerror_r can't handle out-of-range errno values.
22#if defined(ELAST)
23# define _LIBCPP_ELAST ELAST
24#elif defined(__LLVM_LIBC__)
25// No _LIBCPP_ELAST needed for LLVM libc
26#elif defined(_NEWLIB_VERSION)
27# define _LIBCPP_ELAST __ELASTERROR
28#elif defined(__NuttX__)
29// No _LIBCPP_ELAST needed on NuttX
30#elif defined(__Fuchsia__)
31// No _LIBCPP_ELAST needed on Fuchsia
32#elif defined(__wasi__)
33// No _LIBCPP_ELAST needed on WASI
34#elif defined(__EMSCRIPTEN__)
35// No _LIBCPP_ELAST needed on Emscripten
36#elif defined(__linux__) || _LIBCPP_HAS_MUSL_LIBC
37# define _LIBCPP_ELAST 4095
38#elif defined(__APPLE__)
39// No _LIBCPP_ELAST needed on Apple
40#elif defined(__MVS__)
41# define _LIBCPP_ELAST 1160
42#elif defined(_LIBCPP_MSVCRT_LIKE)
43# define _LIBCPP_ELAST (_sys_nerr - 1)
44#elif defined(_AIX)
45# define _LIBCPP_ELAST 127
46#else
47// Warn here so that the person doing the libcxx port has an easier time:
48# warning ELAST for this platform not yet implemented
49#endif
50
51#endif // _LIBCPP_CONFIG_ELAST
52