1//===----------------------- config_elast.h -------------------------------===//
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(_NEWLIB_VERSION)
25#define _LIBCPP_ELAST __ELASTERROR
26#elif defined(__NuttX__)
27// No _LIBCPP_ELAST needed on NuttX
28#elif defined(__Fuchsia__)
29// No _LIBCPP_ELAST needed on Fuchsia
30#elif defined(__wasi__)
31// No _LIBCPP_ELAST needed on WASI
32#elif defined(__linux__) || defined(_LIBCPP_HAS_MUSL_LIBC)
33#define _LIBCPP_ELAST 4095
34#elif defined(__APPLE__)
35// No _LIBCPP_ELAST needed on Apple
36#elif defined(__sun__)
37#define _LIBCPP_ELAST ESTALE
38#elif defined(__MVS__)
39#define _LIBCPP_ELAST 1160
40#elif defined(_LIBCPP_MSVCRT_LIKE)
41#define _LIBCPP_ELAST (_sys_nerr - 1)
42#elif defined(_AIX)
43#define _LIBCPP_ELAST 127
44#else
45// Warn here so that the person doing the libcxx port has an easier time:
46#warning ELAST for this platform not yet implemented
47#endif
48
49#endif // _LIBCPP_CONFIG_ELAST
50