/uspace/lib/posix/include/posix/errno.h
https://gitlab.com/vhelen/vhelen · C Header · 326 lines · 254 code · 13 blank · 59 comment · 0 complexity · 80a97948974c34016cc1c963432a99e9 MD5 · raw file
- /*
- * Copyright (c) 2011 Jiri Zarevucky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- /** @addtogroup libposix
- * @{
- */
- /** @file System error numbers.
- */
- #ifndef POSIX_ERRNO_H_
- #define POSIX_ERRNO_H_
- #include "libc/errno.h"
- /* IMPORTANT:
- * Since libc uses negative errorcodes, some sort of conversion is necessary to
- * keep POSIX programs and libraries from breaking. This file maps POSIX error
- * codes to absolute values of corresponding libc codes where available, and
- * assigns new code where there is no prior definition in libc.
- *
- * A new errno variable is defined. When accessed, the function first looks at
- * libc errno and iff it is != 0, sets the POSIX errno to absolute value of
- * libc errno. Given that no library function sets errno to 0 and that all
- * POSIX libraries will be used solely by POSIX programs (thus, there only needs
- * to be one way correspondence between errno and posix_errno), this approach
- * should work as expected in most cases and does not require any wrappers for
- * libc routines that would just change errno values.
- *
- * There is no conditioning by LIBPOSIX_INTERNAL for redefinitions of macros.
- * If there is a need to check errno for a value not defined by POSIX, it's
- * necessary to compare errno against abs(ECODE), because there is no
- * redefinition for such error codes.
- *
- * XXX: maybe all HOS error codes should be redefined
- *
- * NOTE: This redefinition is slightly POSIX incompatible, since the
- * specification requires the macro values to be usable in preprocessing
- * directives. I don't think that's very important, though.
- */
- #undef errno
- #define errno (*__posix_errno())
- extern int *__posix_errno(void);
- #define __TOP_ERRNO (-NO_DATA)
- enum {
- POSIX_E2BIG = __TOP_ERRNO + 1,
- POSIX_EACCES = __TOP_ERRNO + 2,
- POSIX_EADDRINUSE = -EADDRINUSE,
- POSIX_EADDRNOTAVAIL = -EADDRNOTAVAIL,
- POSIX_EAFNOSUPPORT = -EAFNOSUPPORT,
- POSIX_EAGAIN = -EAGAIN,
- POSIX_EALREADY = __TOP_ERRNO + 3,
- POSIX_EBADF = -EBADF,
- POSIX_EBADMSG = __TOP_ERRNO + 4,
- POSIX_EBUSY = -EBUSY,
- POSIX_ECANCELED = __TOP_ERRNO + 5,
- POSIX_ECHILD = __TOP_ERRNO + 6,
- POSIX_ECONNABORTED = __TOP_ERRNO + 7,
- POSIX_ECONNREFUSED = __TOP_ERRNO + 8,
- POSIX_ECONNRESET = __TOP_ERRNO + 9,
- POSIX_EDEADLK = __TOP_ERRNO + 10,
- POSIX_EDESTADDRREQ = -EDESTADDRREQ,
- POSIX_EDOM = __TOP_ERRNO + 11,
- POSIX_EDQUOT = __TOP_ERRNO + 12,
- POSIX_EEXIST = -EEXIST,
- POSIX_EFAULT = __TOP_ERRNO + 13,
- POSIX_EFBIG = __TOP_ERRNO + 14,
- POSIX_EHOSTUNREACH = __TOP_ERRNO + 15,
- POSIX_EIDRM = __TOP_ERRNO + 16,
- POSIX_EILSEQ = __TOP_ERRNO + 17,
- POSIX_EINPROGRESS = -EINPROGRESS,
- POSIX_EINTR = -EINTR,
- POSIX_EINVAL = -EINVAL,
- POSIX_EIO = -EIO,
- POSIX_EISCONN = __TOP_ERRNO + 18,
- POSIX_EISDIR = -EISDIR,
- POSIX_ELOOP = __TOP_ERRNO + 19,
- POSIX_EMFILE = -EMFILE,
- POSIX_EMLINK = -EMLINK,
- POSIX_EMSGSIZE = __TOP_ERRNO + 20,
- POSIX_EMULTIHOP = __TOP_ERRNO + 21,
- POSIX_ENAMETOOLONG = -ENAMETOOLONG,
- POSIX_ENETDOWN = __TOP_ERRNO + 22,
- POSIX_ENETRESET = __TOP_ERRNO + 23,
- POSIX_ENETUNREACH = __TOP_ERRNO + 24,
- POSIX_ENFILE = __TOP_ERRNO + 25,
- POSIX_ENOBUFS = __TOP_ERRNO + 26,
- POSIX_ENODATA = -NO_DATA,
- POSIX_ENODEV = __TOP_ERRNO + 27,
- POSIX_ENOENT = -ENOENT,
- POSIX_ENOEXEC = __TOP_ERRNO + 28,
- POSIX_ENOLCK = __TOP_ERRNO + 29,
- POSIX_ENOLINK = __TOP_ERRNO + 30,
- POSIX_ENOMEM = -ENOMEM,
- POSIX_ENOMSG = __TOP_ERRNO + 31,
- POSIX_ENOPROTOOPT = __TOP_ERRNO + 32,
- POSIX_ENOSPC = -ENOSPC,
- POSIX_ENOSR = __TOP_ERRNO + 33,
- POSIX_ENOSTR = __TOP_ERRNO + 34,
- POSIX_ENOSYS = __TOP_ERRNO + 35,
- POSIX_ENOTCONN = -ENOTCONN,
- POSIX_ENOTDIR = -ENOTDIR,
- POSIX_ENOTEMPTY = -ENOTEMPTY,
- POSIX_ENOTRECOVERABLE = __TOP_ERRNO + 36,
- POSIX_ENOTSOCK = -ENOTSOCK,
- POSIX_ENOTSUP = -ENOTSUP,
- POSIX_ENOTTY = __TOP_ERRNO + 37,
- POSIX_ENXIO = __TOP_ERRNO + 38,
- POSIX_EOPNOTSUPP = __TOP_ERRNO + 39,
- POSIX_EOVERFLOW = -EOVERFLOW,
- POSIX_EOWNERDEAD = __TOP_ERRNO + 40,
- POSIX_EPERM = -EPERM,
- POSIX_EPIPE = __TOP_ERRNO + 41,
- POSIX_EPROTO = __TOP_ERRNO + 42,
- POSIX_EPROTONOSUPPORT = -EPROTONOSUPPORT,
- POSIX_EPROTOTYPE = __TOP_ERRNO + 43,
- POSIX_ERANGE = -ERANGE,
- POSIX_EROFS = __TOP_ERRNO + 44,
- POSIX_ESPIPE = __TOP_ERRNO + 45,
- POSIX_ESRCH = __TOP_ERRNO + 46,
- POSIX_ESTALE = __TOP_ERRNO + 47,
- POSIX_ETIME = __TOP_ERRNO + 48,
- POSIX_ETIMEDOUT = __TOP_ERRNO + 49,
- POSIX_ETXTBSY = __TOP_ERRNO + 50,
- POSIX_EWOULDBLOCK = __TOP_ERRNO + 51,
- POSIX_EXDEV = -EXDEV,
- };
- #undef __TOP_ERRNO
- #undef E2BIG
- #undef EACCES
- #undef EADDRINUSE
- #undef EADDRNOTAVAIL
- #undef EAFNOSUPPORT
- #undef EAGAIN
- #undef EALREADY
- #undef EBADF
- #undef EBADMSG
- #undef EBUSY
- #undef ECANCELED
- #undef ECHILD
- #undef ECONNABORTED
- #undef ECONNREFUSED
- #undef ECONNRESET
- #undef EDEADLK
- #undef EDESTADDRREQ
- #undef EDOM
- #undef EDQUOT
- #undef EEXIST
- #undef EFAULT
- #undef EFBIG
- #undef EHOSTUNREACH
- #undef EIDRM
- #undef EILSEQ
- #undef EINPROGRESS
- #undef EINTR
- #undef EINVAL
- #undef EIO
- #undef EISCONN
- #undef EISDIR
- #undef ELOOP
- #undef EMFILE
- #undef EMLINK
- #undef EMSGSIZE
- #undef EMULTIHOP
- #undef ENAMETOOLONG
- #undef ENETDOWN
- #undef ENETRESET
- #undef ENETUNREACH
- #undef ENFILE
- #undef ENOBUFS
- #undef ENODATA
- #undef ENODEV
- #undef ENOENT
- #undef ENOEXEC
- #undef ENOLCK
- #undef ENOLINK
- #undef ENOMEM
- #undef ENOMSG
- #undef ENOPROTOOPT
- #undef ENOSPC
- #undef ENOSR
- #undef ENOSTR
- #undef ENOSYS
- #undef ENOTCONN
- #undef ENOTDIR
- #undef ENOTEMPTY
- #undef ENOTRECOVERABLE
- #undef ENOTSOCK
- #undef ENOTSUP
- #undef ENOTTY
- #undef ENXIO
- #undef EOPNOTSUPP
- #undef EOVERFLOW
- #undef EOWNERDEAD
- #undef EPERM
- #undef EPIPE
- #undef EPROTO
- #undef EPROTONOSUPPORT
- #undef EPROTOTYPE
- #undef ERANGE
- #undef EROFS
- #undef ESPIPE
- #undef ESRCH
- #undef ESTALE
- #undef ETIME
- #undef ETIMEDOUT
- #undef ETXTBSY
- #undef EWOULDBLOCK
- #undef EXDEV
- #define E2BIG POSIX_E2BIG
- #define EACCES POSIX_EACCES
- #define EADDRINUSE POSIX_EADDRINUSE
- #define EADDRNOTAVAIL POSIX_EADDRNOTAVAIL
- #define EAFNOSUPPORT POSIX_EAFNOSUPPORT
- #define EAGAIN POSIX_EAGAIN
- #define EALREADY POSIX_EALREADY
- #define EBADF POSIX_EBADF
- #define EBADMSG POSIX_EBADMSG
- #define EBUSY POSIX_EBUSY
- #define ECANCELED POSIX_ECANCELED
- #define ECHILD POSIX_ECHILD
- #define ECONNABORTED POSIX_ECONNABORTED
- #define ECONNREFUSED POSIX_ECONNREFUSED
- #define ECONNRESET POSIX_ECONNRESET
- #define EDEADLK POSIX_EDEADLK
- #define EDESTADDRREQ POSIX_EDESTADDRREQ
- #define EDOM POSIX_EDOM
- #define EDQUOT POSIX_EDQUOT
- #define EEXIST POSIX_EEXIST
- #define EFAULT POSIX_EFAULT
- #define EFBIG POSIX_EFBIG
- #define EHOSTUNREACH POSIX_EHOSTUNREACH
- #define EIDRM POSIX_EIDRM
- #define EILSEQ POSIX_EILSEQ
- #define EINPROGRESS POSIX_EINPROGRESS
- #define EINTR POSIX_EINTR
- #define EINVAL POSIX_EINVAL
- #define EIO POSIX_EIO
- #define EISCONN POSIX_EISCONN
- #define EISDIR POSIX_EISDIR
- #define ELOOP POSIX_ELOOP
- #define EMFILE POSIX_EMFILE
- #define EMLINK POSIX_EMLINK
- #define EMSGSIZE POSIX_EMSGSIZE
- #define EMULTIHOP POSIX_EMULTIHOP
- #define ENAMETOOLONG POSIX_ENAMETOOLONG
- #define ENETDOWN POSIX_ENETDOWN
- #define ENETRESET POSIX_ENETRESET
- #define ENETUNREACH POSIX_ENETUNREACH
- #define ENFILE POSIX_ENFILE
- #define ENOBUFS POSIX_ENOBUFS
- #define ENODATA POSIX_ENODATA
- #define ENODEV POSIX_ENODEV
- #define ENOENT POSIX_ENOENT
- #define ENOEXEC POSIX_ENOEXEC
- #define ENOLCK POSIX_ENOLCK
- #define ENOLINK POSIX_ENOLINK
- #define ENOMEM POSIX_ENOMEM
- #define ENOMSG POSIX_ENOMSG
- #define ENOPROTOOPT POSIX_ENOPROTOOPT
- #define ENOSPC POSIX_ENOSPC
- #define ENOSR POSIX_ENOSR
- #define ENOSTR POSIX_ENOSTR
- #define ENOSYS POSIX_ENOSYS
- #define ENOTCONN POSIX_ENOTCONN
- #define ENOTDIR POSIX_ENOTDIR
- #define ENOTEMPTY POSIX_ENOTEMPTY
- #define ENOTRECOVERABLE POSIX_ENOTRECOVERABLE
- #define ENOTSOCK POSIX_ENOTSOCK
- #define ENOTSUP POSIX_ENOTSUP
- #define ENOTTY POSIX_ENOTTY
- #define ENXIO POSIX_ENXIO
- #define EOPNOTSUPP POSIX_EOPNOTSUPP
- #define EOVERFLOW POSIX_EOVERFLOW
- #define EOWNERDEAD POSIX_EOWNERDEAD
- #define EPERM POSIX_EPERM
- #define EPIPE POSIX_EPIPE
- #define EPROTO POSIX_EPROTO
- #define EPROTONOSUPPORT POSIX_EPROTONOSUPPORT
- #define EPROTOTYPE POSIX_EPROTOTYPE
- #define ERANGE POSIX_ERANGE
- #define EROFS POSIX_EROFS
- #define ESPIPE POSIX_ESPIPE
- #define ESRCH POSIX_ESRCH
- #define ESTALE POSIX_ESTALE
- #define ETIME POSIX_ETIME
- #define ETIMEDOUT POSIX_ETIMEDOUT
- #define ETXTBSY POSIX_ETXTBSY
- #define EWOULDBLOCK POSIX_EWOULDBLOCK
- #define EXDEV POSIX_EXDEV
- #endif /* POSIX_ERRNO_H_ */
- /** @}
- */