xref: /llvm-project/libcxx/include/__cxx03/__system_error/errc.h (revision ce7771902dc50d900de639d499a60486b83f70e0)
1e78f53d1SNikolas Klauser // -*- C++ -*-
2e78f53d1SNikolas Klauser //===----------------------------------------------------------------------===//
3e78f53d1SNikolas Klauser //
4e78f53d1SNikolas Klauser // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5e78f53d1SNikolas Klauser // See https://llvm.org/LICENSE.txt for license information.
6e78f53d1SNikolas Klauser // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7e78f53d1SNikolas Klauser //
8e78f53d1SNikolas Klauser //===----------------------------------------------------------------------===//
9e78f53d1SNikolas Klauser 
10*ce777190SNikolas Klauser #ifndef _LIBCPP___CXX03___ERRC
11*ce777190SNikolas Klauser #define _LIBCPP___CXX03___ERRC
12e78f53d1SNikolas Klauser 
13e78f53d1SNikolas Klauser /*
14e78f53d1SNikolas Klauser     system_error synopsis
15e78f53d1SNikolas Klauser 
16e78f53d1SNikolas Klauser namespace std
17e78f53d1SNikolas Klauser {
18e78f53d1SNikolas Klauser 
19e78f53d1SNikolas Klauser enum class errc
20e78f53d1SNikolas Klauser {
21e78f53d1SNikolas Klauser     address_family_not_supported,       // EAFNOSUPPORT
22e78f53d1SNikolas Klauser     address_in_use,                     // EADDRINUSE
23e78f53d1SNikolas Klauser     address_not_available,              // EADDRNOTAVAIL
24e78f53d1SNikolas Klauser     already_connected,                  // EISCONN
25e78f53d1SNikolas Klauser     argument_list_too_long,             // E2BIG
26e78f53d1SNikolas Klauser     argument_out_of_domain,             // EDOM
27e78f53d1SNikolas Klauser     bad_address,                        // EFAULT
28e78f53d1SNikolas Klauser     bad_file_descriptor,                // EBADF
29e78f53d1SNikolas Klauser     bad_message,                        // EBADMSG
30e78f53d1SNikolas Klauser     broken_pipe,                        // EPIPE
31e78f53d1SNikolas Klauser     connection_aborted,                 // ECONNABORTED
32e78f53d1SNikolas Klauser     connection_already_in_progress,     // EALREADY
33e78f53d1SNikolas Klauser     connection_refused,                 // ECONNREFUSED
34e78f53d1SNikolas Klauser     connection_reset,                   // ECONNRESET
35e78f53d1SNikolas Klauser     cross_device_link,                  // EXDEV
36e78f53d1SNikolas Klauser     destination_address_required,       // EDESTADDRREQ
37e78f53d1SNikolas Klauser     device_or_resource_busy,            // EBUSY
38e78f53d1SNikolas Klauser     directory_not_empty,                // ENOTEMPTY
39e78f53d1SNikolas Klauser     executable_format_error,            // ENOEXEC
40e78f53d1SNikolas Klauser     file_exists,                        // EEXIST
41e78f53d1SNikolas Klauser     file_too_large,                     // EFBIG
42e78f53d1SNikolas Klauser     filename_too_long,                  // ENAMETOOLONG
43e78f53d1SNikolas Klauser     function_not_supported,             // ENOSYS
44e78f53d1SNikolas Klauser     host_unreachable,                   // EHOSTUNREACH
45e78f53d1SNikolas Klauser     identifier_removed,                 // EIDRM
46e78f53d1SNikolas Klauser     illegal_byte_sequence,              // EILSEQ
47e78f53d1SNikolas Klauser     inappropriate_io_control_operation, // ENOTTY
48e78f53d1SNikolas Klauser     interrupted,                        // EINTR
49e78f53d1SNikolas Klauser     invalid_argument,                   // EINVAL
50e78f53d1SNikolas Klauser     invalid_seek,                       // ESPIPE
51e78f53d1SNikolas Klauser     io_error,                           // EIO
52e78f53d1SNikolas Klauser     is_a_directory,                     // EISDIR
53e78f53d1SNikolas Klauser     message_size,                       // EMSGSIZE
54e78f53d1SNikolas Klauser     network_down,                       // ENETDOWN
55e78f53d1SNikolas Klauser     network_reset,                      // ENETRESET
56e78f53d1SNikolas Klauser     network_unreachable,                // ENETUNREACH
57e78f53d1SNikolas Klauser     no_buffer_space,                    // ENOBUFS
58e78f53d1SNikolas Klauser     no_child_process,                   // ECHILD
59e78f53d1SNikolas Klauser     no_link,                            // ENOLINK
60e78f53d1SNikolas Klauser     no_lock_available,                  // ENOLCK
61e78f53d1SNikolas Klauser     no_message_available,               // ENODATA         // deprecated
62e78f53d1SNikolas Klauser     no_message,                         // ENOMSG
63e78f53d1SNikolas Klauser     no_protocol_option,                 // ENOPROTOOPT
64e78f53d1SNikolas Klauser     no_space_on_device,                 // ENOSPC
65e78f53d1SNikolas Klauser     no_stream_resources,                // ENOSR           // deprecated
66e78f53d1SNikolas Klauser     no_such_device_or_address,          // ENXIO
67e78f53d1SNikolas Klauser     no_such_device,                     // ENODEV
68e78f53d1SNikolas Klauser     no_such_file_or_directory,          // ENOENT
69e78f53d1SNikolas Klauser     no_such_process,                    // ESRCH
70e78f53d1SNikolas Klauser     not_a_directory,                    // ENOTDIR
71e78f53d1SNikolas Klauser     not_a_socket,                       // ENOTSOCK
72e78f53d1SNikolas Klauser     not_a_stream,                       // ENOSTR          // deprecated
73e78f53d1SNikolas Klauser     not_connected,                      // ENOTCONN
74e78f53d1SNikolas Klauser     not_enough_memory,                  // ENOMEM
75e78f53d1SNikolas Klauser     not_supported,                      // ENOTSUP
76e78f53d1SNikolas Klauser     operation_canceled,                 // ECANCELED
77e78f53d1SNikolas Klauser     operation_in_progress,              // EINPROGRESS
78e78f53d1SNikolas Klauser     operation_not_permitted,            // EPERM
79e78f53d1SNikolas Klauser     operation_not_supported,            // EOPNOTSUPP
80e78f53d1SNikolas Klauser     operation_would_block,              // EWOULDBLOCK
81e78f53d1SNikolas Klauser     owner_dead,                         // EOWNERDEAD
82e78f53d1SNikolas Klauser     permission_denied,                  // EACCES
83e78f53d1SNikolas Klauser     protocol_error,                     // EPROTO
84e78f53d1SNikolas Klauser     protocol_not_supported,             // EPROTONOSUPPORT
85e78f53d1SNikolas Klauser     read_only_file_system,              // EROFS
86e78f53d1SNikolas Klauser     resource_deadlock_would_occur,      // EDEADLK
87e78f53d1SNikolas Klauser     resource_unavailable_try_again,     // EAGAIN
88e78f53d1SNikolas Klauser     result_out_of_range,                // ERANGE
89e78f53d1SNikolas Klauser     state_not_recoverable,              // ENOTRECOVERABLE
90e78f53d1SNikolas Klauser     stream_timeout,                     // ETIME           // deprecated
91e78f53d1SNikolas Klauser     text_file_busy,                     // ETXTBSY
92e78f53d1SNikolas Klauser     timed_out,                          // ETIMEDOUT
93e78f53d1SNikolas Klauser     too_many_files_open_in_system,      // ENFILE
94e78f53d1SNikolas Klauser     too_many_files_open,                // EMFILE
95e78f53d1SNikolas Klauser     too_many_links,                     // EMLINK
96e78f53d1SNikolas Klauser     too_many_symbolic_link_levels,      // ELOOP
97e78f53d1SNikolas Klauser     value_too_large,                    // EOVERFLOW
98e78f53d1SNikolas Klauser     wrong_protocol_type                 // EPROTOTYPE
99e78f53d1SNikolas Klauser };
100e78f53d1SNikolas Klauser 
101e78f53d1SNikolas Klauser */
102e78f53d1SNikolas Klauser 
10373fbae83SNikolas Klauser #include <__cxx03/__config>
10473fbae83SNikolas Klauser #include <__cxx03/cerrno>
105e78f53d1SNikolas Klauser 
106e78f53d1SNikolas Klauser #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
107e78f53d1SNikolas Klauser #  pragma GCC system_header
108e78f53d1SNikolas Klauser #endif
109e78f53d1SNikolas Klauser 
110e78f53d1SNikolas Klauser // The method of pushing and popping the diagnostics fails for GCC.  GCC does
111e78f53d1SNikolas Klauser // not recognize the pragma's used to generate deprecated diagnostics for
112e78f53d1SNikolas Klauser // macros. So GCC does not need the pushing and popping.
113e78f53d1SNikolas Klauser //
114e78f53d1SNikolas Klauser // TODO Remove this when the deprecated constants are removed.
115e78f53d1SNikolas Klauser //
116e78f53d1SNikolas Klauser // Note based on the post-review comments in
117e78f53d1SNikolas Klauser // https://github.com/llvm/llvm-project/pull/80542 libc++ no longer deprecates
118e78f53d1SNikolas Klauser // the macros. Since C libraries may start to deprecate these POSIX macros the
119e78f53d1SNikolas Klauser // deprecation warning avoidance is kept.
120e78f53d1SNikolas Klauser #if defined(_LIBCPP_COMPILER_CLANG_BASED)
121e78f53d1SNikolas Klauser #  define _LIBCPP_SUPPRESS_DEPRECATED_ERRC_PUSH _LIBCPP_SUPPRESS_DEPRECATED_PUSH
122e78f53d1SNikolas Klauser #  define _LIBCPP_SUPPRESS_DEPRECATED_ERRC_POP _LIBCPP_SUPPRESS_DEPRECATED_POP
123e78f53d1SNikolas Klauser #else
124e78f53d1SNikolas Klauser #  define _LIBCPP_SUPPRESS_DEPRECATED_ERRC_PUSH
125e78f53d1SNikolas Klauser #  define _LIBCPP_SUPPRESS_DEPRECATED_ERRC_POP
126e78f53d1SNikolas Klauser #endif
127e78f53d1SNikolas Klauser 
128e78f53d1SNikolas Klauser _LIBCPP_BEGIN_NAMESPACE_STD
129e78f53d1SNikolas Klauser 
130e78f53d1SNikolas Klauser // Some error codes are not present on all platforms, so we provide equivalents
131e78f53d1SNikolas Klauser // for them:
132e78f53d1SNikolas Klauser 
133e78f53d1SNikolas Klauser // enum class errc
134e78f53d1SNikolas Klauser //
135e78f53d1SNikolas Klauser // LWG3869 deprecates the UNIX STREAMS macros and enum values.
136e78f53d1SNikolas Klauser // This makes the code clumbersome:
137e78f53d1SNikolas Klauser // - the enum value is deprecated and should show a diagnostic,
138e78f53d1SNikolas Klauser // - the macro is deprecated and should _not_ show a diagnostic in this
139e78f53d1SNikolas Klauser //   context, and
140e78f53d1SNikolas Klauser // - the macro is not always available.
141e78f53d1SNikolas Klauser // This leads to the odd pushing and popping of the deprecated
142e78f53d1SNikolas Klauser // diagnostic.
143e78f53d1SNikolas Klauser _LIBCPP_DECLARE_STRONG_ENUM(errc){
144e78f53d1SNikolas Klauser     address_family_not_supported       = EAFNOSUPPORT,
145e78f53d1SNikolas Klauser     address_in_use                     = EADDRINUSE,
146e78f53d1SNikolas Klauser     address_not_available              = EADDRNOTAVAIL,
147e78f53d1SNikolas Klauser     already_connected                  = EISCONN,
148e78f53d1SNikolas Klauser     argument_list_too_long             = E2BIG,
149e78f53d1SNikolas Klauser     argument_out_of_domain             = EDOM,
150e78f53d1SNikolas Klauser     bad_address                        = EFAULT,
151e78f53d1SNikolas Klauser     bad_file_descriptor                = EBADF,
152e78f53d1SNikolas Klauser     bad_message                        = EBADMSG,
153e78f53d1SNikolas Klauser     broken_pipe                        = EPIPE,
154e78f53d1SNikolas Klauser     connection_aborted                 = ECONNABORTED,
155e78f53d1SNikolas Klauser     connection_already_in_progress     = EALREADY,
156e78f53d1SNikolas Klauser     connection_refused                 = ECONNREFUSED,
157e78f53d1SNikolas Klauser     connection_reset                   = ECONNRESET,
158e78f53d1SNikolas Klauser     cross_device_link                  = EXDEV,
159e78f53d1SNikolas Klauser     destination_address_required       = EDESTADDRREQ,
160e78f53d1SNikolas Klauser     device_or_resource_busy            = EBUSY,
161e78f53d1SNikolas Klauser     directory_not_empty                = ENOTEMPTY,
162e78f53d1SNikolas Klauser     executable_format_error            = ENOEXEC,
163e78f53d1SNikolas Klauser     file_exists                        = EEXIST,
164e78f53d1SNikolas Klauser     file_too_large                     = EFBIG,
165e78f53d1SNikolas Klauser     filename_too_long                  = ENAMETOOLONG,
166e78f53d1SNikolas Klauser     function_not_supported             = ENOSYS,
167e78f53d1SNikolas Klauser     host_unreachable                   = EHOSTUNREACH,
168e78f53d1SNikolas Klauser     identifier_removed                 = EIDRM,
169e78f53d1SNikolas Klauser     illegal_byte_sequence              = EILSEQ,
170e78f53d1SNikolas Klauser     inappropriate_io_control_operation = ENOTTY,
171e78f53d1SNikolas Klauser     interrupted                        = EINTR,
172e78f53d1SNikolas Klauser     invalid_argument                   = EINVAL,
173e78f53d1SNikolas Klauser     invalid_seek                       = ESPIPE,
174e78f53d1SNikolas Klauser     io_error                           = EIO,
175e78f53d1SNikolas Klauser     is_a_directory                     = EISDIR,
176e78f53d1SNikolas Klauser     message_size                       = EMSGSIZE,
177e78f53d1SNikolas Klauser     network_down                       = ENETDOWN,
178e78f53d1SNikolas Klauser     network_reset                      = ENETRESET,
179e78f53d1SNikolas Klauser     network_unreachable                = ENETUNREACH,
180e78f53d1SNikolas Klauser     no_buffer_space                    = ENOBUFS,
181e78f53d1SNikolas Klauser     no_child_process                   = ECHILD,
182e78f53d1SNikolas Klauser     no_link                            = ENOLINK,
183e78f53d1SNikolas Klauser     no_lock_available                  = ENOLCK,
184e78f53d1SNikolas Klauser     // clang-format off
185e78f53d1SNikolas Klauser     no_message_available _LIBCPP_DEPRECATED =
186e78f53d1SNikolas Klauser     _LIBCPP_SUPPRESS_DEPRECATED_ERRC_PUSH
187e78f53d1SNikolas Klauser #ifdef ENODATA
188e78f53d1SNikolas Klauser                                               ENODATA
189e78f53d1SNikolas Klauser #else
190e78f53d1SNikolas Klauser                                               ENOMSG
191e78f53d1SNikolas Klauser #endif
192e78f53d1SNikolas Klauser     _LIBCPP_SUPPRESS_DEPRECATED_ERRC_POP
193e78f53d1SNikolas Klauser     ,
194e78f53d1SNikolas Klauser     // clang-format on
195e78f53d1SNikolas Klauser     no_message         = ENOMSG,
196e78f53d1SNikolas Klauser     no_protocol_option = ENOPROTOOPT,
197e78f53d1SNikolas Klauser     no_space_on_device = ENOSPC,
198e78f53d1SNikolas Klauser     // clang-format off
199e78f53d1SNikolas Klauser     no_stream_resources _LIBCPP_DEPRECATED =
200e78f53d1SNikolas Klauser     _LIBCPP_SUPPRESS_DEPRECATED_ERRC_PUSH
201e78f53d1SNikolas Klauser #ifdef ENOSR
202e78f53d1SNikolas Klauser                                               ENOSR
203e78f53d1SNikolas Klauser #else
204e78f53d1SNikolas Klauser                                               ENOMEM
205e78f53d1SNikolas Klauser #endif
206e78f53d1SNikolas Klauser     _LIBCPP_SUPPRESS_DEPRECATED_ERRC_POP
207e78f53d1SNikolas Klauser     ,
208e78f53d1SNikolas Klauser     // clang-format on
209e78f53d1SNikolas Klauser     no_such_device_or_address = ENXIO,
210e78f53d1SNikolas Klauser     no_such_device            = ENODEV,
211e78f53d1SNikolas Klauser     no_such_file_or_directory = ENOENT,
212e78f53d1SNikolas Klauser     no_such_process           = ESRCH,
213e78f53d1SNikolas Klauser     not_a_directory           = ENOTDIR,
214e78f53d1SNikolas Klauser     not_a_socket              = ENOTSOCK,
215e78f53d1SNikolas Klauser     // clang-format off
216e78f53d1SNikolas Klauser     not_a_stream _LIBCPP_DEPRECATED =
217e78f53d1SNikolas Klauser     _LIBCPP_SUPPRESS_DEPRECATED_ERRC_PUSH
218e78f53d1SNikolas Klauser #ifdef ENOSTR
219e78f53d1SNikolas Klauser                                       ENOSTR
220e78f53d1SNikolas Klauser #else
221e78f53d1SNikolas Klauser                                       EINVAL
222e78f53d1SNikolas Klauser #endif
223e78f53d1SNikolas Klauser     _LIBCPP_SUPPRESS_DEPRECATED_ERRC_POP
224e78f53d1SNikolas Klauser     ,
225e78f53d1SNikolas Klauser     // clang-format on
226e78f53d1SNikolas Klauser     not_connected                  = ENOTCONN,
227e78f53d1SNikolas Klauser     not_enough_memory              = ENOMEM,
228e78f53d1SNikolas Klauser     not_supported                  = ENOTSUP,
229e78f53d1SNikolas Klauser     operation_canceled             = ECANCELED,
230e78f53d1SNikolas Klauser     operation_in_progress          = EINPROGRESS,
231e78f53d1SNikolas Klauser     operation_not_permitted        = EPERM,
232e78f53d1SNikolas Klauser     operation_not_supported        = EOPNOTSUPP,
233e78f53d1SNikolas Klauser     operation_would_block          = EWOULDBLOCK,
234e78f53d1SNikolas Klauser     owner_dead                     = EOWNERDEAD,
235e78f53d1SNikolas Klauser     permission_denied              = EACCES,
236e78f53d1SNikolas Klauser     protocol_error                 = EPROTO,
237e78f53d1SNikolas Klauser     protocol_not_supported         = EPROTONOSUPPORT,
238e78f53d1SNikolas Klauser     read_only_file_system          = EROFS,
239e78f53d1SNikolas Klauser     resource_deadlock_would_occur  = EDEADLK,
240e78f53d1SNikolas Klauser     resource_unavailable_try_again = EAGAIN,
241e78f53d1SNikolas Klauser     result_out_of_range            = ERANGE,
242e78f53d1SNikolas Klauser     state_not_recoverable          = ENOTRECOVERABLE,
243e78f53d1SNikolas Klauser     // clang-format off
244e78f53d1SNikolas Klauser     stream_timeout _LIBCPP_DEPRECATED =
245e78f53d1SNikolas Klauser     _LIBCPP_SUPPRESS_DEPRECATED_ERRC_PUSH
246e78f53d1SNikolas Klauser #ifdef ETIME
247e78f53d1SNikolas Klauser                                         ETIME
248e78f53d1SNikolas Klauser #else
249e78f53d1SNikolas Klauser                                         ETIMEDOUT
250e78f53d1SNikolas Klauser #endif
251e78f53d1SNikolas Klauser     _LIBCPP_SUPPRESS_DEPRECATED_ERRC_POP
252e78f53d1SNikolas Klauser     ,
253e78f53d1SNikolas Klauser     // clang-format on
254e78f53d1SNikolas Klauser     text_file_busy                = ETXTBSY,
255e78f53d1SNikolas Klauser     timed_out                     = ETIMEDOUT,
256e78f53d1SNikolas Klauser     too_many_files_open_in_system = ENFILE,
257e78f53d1SNikolas Klauser     too_many_files_open           = EMFILE,
258e78f53d1SNikolas Klauser     too_many_links                = EMLINK,
259e78f53d1SNikolas Klauser     too_many_symbolic_link_levels = ELOOP,
260e78f53d1SNikolas Klauser     value_too_large               = EOVERFLOW,
261e78f53d1SNikolas Klauser     wrong_protocol_type           = EPROTOTYPE};
262e78f53d1SNikolas Klauser _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(errc)
263e78f53d1SNikolas Klauser 
264e78f53d1SNikolas Klauser _LIBCPP_END_NAMESPACE_STD
265e78f53d1SNikolas Klauser 
266*ce777190SNikolas Klauser #endif // _LIBCPP___CXX03___ERRC
267