Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/posix/include/posix/errno.h

    r18bb198 rfab2746  
     1/*
     2 * Copyright (c) 2011 Jiri Zarevucky
     3 * All rights reserved.
     4 *
     5 * Redistribution and use in source and binary forms, with or without
     6 * modification, are permitted provided that the following conditions
     7 * are met:
     8 *
     9 * - Redistributions of source code must retain the above copyright
     10 *   notice, this list of conditions and the following disclaimer.
     11 * - Redistributions in binary form must reproduce the above copyright
     12 *   notice, this list of conditions and the following disclaimer in the
     13 *   documentation and/or other materials provided with the distribution.
     14 * - The name of the author may not be used to endorse or promote products
     15 *   derived from this software without specific prior written permission.
     16 *
     17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27 */
     28
     29/** @addtogroup libposix
     30 * @{
     31 */
     32/** @file System error numbers.
     33 */
     34
     35#ifndef POSIX_ERRNO_H_
     36#define POSIX_ERRNO_H_
     37
    138#include "libc/errno.h"
     39
     40/* IMPORTANT:
     41 * Since libc uses negative errorcodes, some sort of conversion is necessary to
     42 * keep POSIX programs and libraries from breaking. This file maps POSIX error
     43 * codes to absolute values of corresponding libc codes where available, and
     44 * assigns new code where there is no prior definition in libc.
     45 *
     46 * A new errno variable is defined. When accessed, the function first looks at
     47 * libc errno and iff it is != 0, sets the POSIX errno to absolute value of
     48 * libc errno. Given that no library function sets errno to 0 and that all
     49 * POSIX libraries will be used solely by POSIX programs (thus, there only needs
     50 * to be one way correspondence between errno and posix_errno), this approach
     51 * should work as expected in most cases and does not require any wrappers for
     52 * libc routines that would just change errno values.
     53 *
     54 * There is no conditioning by LIBPOSIX_INTERNAL for redefinitions of macros.
     55 * If there is a need to check errno for a value not defined by POSIX, it's
     56 * necessary to compare errno against abs(ECODE), because there is no
     57 * redefinition for such error codes.
     58 *
     59 * XXX: maybe all HOS error codes should be redefined
     60 *
     61 * NOTE: This redefinition is slightly POSIX incompatible, since the
     62 *  specification requires the macro values to be usable in preprocessing
     63 *  directives. I don't think that's very important, though.
     64 */
     65
     66#undef errno
     67#define errno (*__posix_errno())
     68
     69extern int *__posix_errno(void);
     70
     71#define __TOP_ERRNO (-EAGAIN)
     72
     73enum {
     74        POSIX_E2BIG = __TOP_ERRNO + 1,
     75        POSIX_EACCES = __TOP_ERRNO + 2,
     76        POSIX_EADDRNOTAVAIL = -EADDRNOTAVAIL,
     77        POSIX_EAGAIN = -EAGAIN,
     78        POSIX_EALREADY = __TOP_ERRNO + 3,
     79        POSIX_EBADF = -EBADF,
     80        POSIX_EBADMSG = __TOP_ERRNO + 4,
     81        POSIX_EBUSY = -EBUSY,
     82        POSIX_ECANCELED = __TOP_ERRNO + 5,
     83        POSIX_ECHILD = __TOP_ERRNO + 6,
     84        POSIX_ECONNABORTED = __TOP_ERRNO + 7,
     85        POSIX_ECONNREFUSED = __TOP_ERRNO + 8,
     86        POSIX_ECONNRESET = __TOP_ERRNO + 9,
     87        POSIX_EDEADLK = __TOP_ERRNO + 10,
     88        POSIX_EDOM = __TOP_ERRNO + 11,
     89        POSIX_EDQUOT = __TOP_ERRNO + 12,
     90        POSIX_EEXIST = -EEXIST,
     91        POSIX_EFAULT = __TOP_ERRNO + 13,
     92        POSIX_EFBIG = __TOP_ERRNO + 14,
     93        POSIX_EHOSTUNREACH = __TOP_ERRNO + 15,
     94        POSIX_EIDRM = __TOP_ERRNO + 16,
     95        POSIX_EILSEQ = __TOP_ERRNO + 17,
     96        POSIX_EINTR = -EINTR,
     97        POSIX_EINVAL = -EINVAL,
     98        POSIX_EIO = -EIO,
     99        POSIX_EISCONN = __TOP_ERRNO + 18,
     100        POSIX_EISDIR = -EISDIR,
     101        POSIX_ELOOP = __TOP_ERRNO + 19,
     102        POSIX_EMFILE = -EMFILE,
     103        POSIX_EMLINK = -EMLINK,
     104        POSIX_EMSGSIZE = __TOP_ERRNO + 20,
     105        POSIX_EMULTIHOP = __TOP_ERRNO + 21,
     106        POSIX_ENAMETOOLONG = -ENAMETOOLONG,
     107        POSIX_ENETDOWN = __TOP_ERRNO + 22,
     108        POSIX_ENETRESET = __TOP_ERRNO + 23,
     109        POSIX_ENETUNREACH = __TOP_ERRNO + 24,
     110        POSIX_ENFILE = __TOP_ERRNO + 25,
     111        POSIX_ENOBUFS = __TOP_ERRNO + 26,
     112        POSIX_ENODEV = __TOP_ERRNO + 27,
     113        POSIX_ENOENT = -ENOENT,
     114        POSIX_ENOEXEC = __TOP_ERRNO + 28,
     115        POSIX_ENOLCK = __TOP_ERRNO + 29,
     116        POSIX_ENOLINK = __TOP_ERRNO + 30,
     117        POSIX_ENOMEM = -ENOMEM,
     118        POSIX_ENOMSG = __TOP_ERRNO + 31,
     119        POSIX_ENOPROTOOPT = __TOP_ERRNO + 32,
     120        POSIX_ENOSPC = -ENOSPC,
     121        POSIX_ENOSR = __TOP_ERRNO + 33,
     122        POSIX_ENOSTR = __TOP_ERRNO + 34,
     123        POSIX_ENOSYS = __TOP_ERRNO + 35,
     124        POSIX_ENOTDIR = -ENOTDIR,
     125        POSIX_ENOTEMPTY = -ENOTEMPTY,
     126        POSIX_ENOTRECOVERABLE = __TOP_ERRNO + 36,
     127        POSIX_ENOTSUP = -ENOTSUP,
     128        POSIX_ENOTTY = __TOP_ERRNO + 37,
     129        POSIX_ENXIO = __TOP_ERRNO + 38,
     130        POSIX_EOPNOTSUPP = __TOP_ERRNO + 39,
     131        POSIX_EOVERFLOW = -EOVERFLOW,
     132        POSIX_EOWNERDEAD = __TOP_ERRNO + 40,
     133        POSIX_EPERM = -EPERM,
     134        POSIX_EPIPE = __TOP_ERRNO + 41,
     135        POSIX_EPROTO = __TOP_ERRNO + 42,
     136        POSIX_EPROTOTYPE = __TOP_ERRNO + 43,
     137        POSIX_ERANGE = -ERANGE,
     138        POSIX_EROFS = __TOP_ERRNO + 44,
     139        POSIX_ESPIPE = __TOP_ERRNO + 45,
     140        POSIX_ESRCH = __TOP_ERRNO + 46,
     141        POSIX_ESTALE = __TOP_ERRNO + 47,
     142        POSIX_ETIME = __TOP_ERRNO + 48,
     143        POSIX_ETIMEDOUT = __TOP_ERRNO + 49,
     144        POSIX_ETXTBSY = __TOP_ERRNO + 50,
     145        POSIX_EWOULDBLOCK = __TOP_ERRNO + 51,
     146        POSIX_EXDEV = -EXDEV,
     147        POSIX_EINPROGRESS = __TOP_ERRNO + 52,
     148        POSIX_ENOTSOCK = __TOP_ERRNO + 53,
     149        POSIX_EDESTADDRREQ = __TOP_ERRNO + 54,
     150        POSIX_EPROTONOSUPPORT = __TOP_ERRNO + 55,
     151        POSIX_EAFNOSUPPORT = __TOP_ERRNO + 56,
     152        POSIX_EADDRINUSE = __TOP_ERRNO + 57,
     153        POSIX_ENOTCONN = __TOP_ERRNO + 58,
     154        POSIX_ENODATA = __TOP_ERRNO + 59,
     155};
     156
     157#undef __TOP_ERRNO
     158
     159#undef E2BIG
     160#undef EACCES
     161#undef EADDRINUSE
     162#undef EADDRNOTAVAIL
     163#undef EAFNOSUPPORT
     164#undef EAGAIN
     165#undef EALREADY
     166#undef EBADF
     167#undef EBADMSG
     168#undef EBUSY
     169#undef ECANCELED
     170#undef ECHILD
     171#undef ECONNABORTED
     172#undef ECONNREFUSED
     173#undef ECONNRESET
     174#undef EDEADLK
     175#undef EDESTADDRREQ
     176#undef EDOM
     177#undef EDQUOT
     178#undef EEXIST
     179#undef EFAULT
     180#undef EFBIG
     181#undef EHOSTUNREACH
     182#undef EIDRM
     183#undef EILSEQ
     184#undef EINPROGRESS
     185#undef EINTR
     186#undef EINVAL
     187#undef EIO
     188#undef EISCONN
     189#undef EISDIR
     190#undef ELOOP
     191#undef EMFILE
     192#undef EMLINK
     193#undef EMSGSIZE
     194#undef EMULTIHOP
     195#undef ENAMETOOLONG
     196#undef ENETDOWN
     197#undef ENETRESET
     198#undef ENETUNREACH
     199#undef ENFILE
     200#undef ENOBUFS
     201#undef ENODATA
     202#undef ENODEV
     203#undef ENOENT
     204#undef ENOEXEC
     205#undef ENOLCK
     206#undef ENOLINK
     207#undef ENOMEM
     208#undef ENOMSG
     209#undef ENOPROTOOPT
     210#undef ENOSPC
     211#undef ENOSR
     212#undef ENOSTR
     213#undef ENOSYS
     214#undef ENOTCONN
     215#undef ENOTDIR
     216#undef ENOTEMPTY
     217#undef ENOTRECOVERABLE
     218#undef ENOTSOCK
     219#undef ENOTSUP
     220#undef ENOTTY
     221#undef ENXIO
     222#undef EOPNOTSUPP
     223#undef EOVERFLOW
     224#undef EOWNERDEAD
     225#undef EPERM
     226#undef EPIPE
     227#undef EPROTO
     228#undef EPROTONOSUPPORT
     229#undef EPROTOTYPE
     230#undef ERANGE
     231#undef EROFS
     232#undef ESPIPE
     233#undef ESRCH
     234#undef ESTALE
     235#undef ETIME
     236#undef ETIMEDOUT
     237#undef ETXTBSY
     238#undef EWOULDBLOCK
     239#undef EXDEV
     240
     241#define E2BIG POSIX_E2BIG
     242#define EACCES POSIX_EACCES
     243#define EADDRINUSE POSIX_EADDRINUSE
     244#define EADDRNOTAVAIL POSIX_EADDRNOTAVAIL
     245#define EAFNOSUPPORT POSIX_EAFNOSUPPORT
     246#define EAGAIN POSIX_EAGAIN
     247#define EALREADY POSIX_EALREADY
     248#define EBADF POSIX_EBADF
     249#define EBADMSG POSIX_EBADMSG
     250#define EBUSY POSIX_EBUSY
     251#define ECANCELED POSIX_ECANCELED
     252#define ECHILD POSIX_ECHILD
     253#define ECONNABORTED POSIX_ECONNABORTED
     254#define ECONNREFUSED POSIX_ECONNREFUSED
     255#define ECONNRESET POSIX_ECONNRESET
     256#define EDEADLK POSIX_EDEADLK
     257#define EDESTADDRREQ POSIX_EDESTADDRREQ
     258#define EDOM POSIX_EDOM
     259#define EDQUOT POSIX_EDQUOT
     260#define EEXIST POSIX_EEXIST
     261#define EFAULT POSIX_EFAULT
     262#define EFBIG POSIX_EFBIG
     263#define EHOSTUNREACH POSIX_EHOSTUNREACH
     264#define EIDRM POSIX_EIDRM
     265#define EILSEQ POSIX_EILSEQ
     266#define EINPROGRESS POSIX_EINPROGRESS
     267#define EINTR POSIX_EINTR
     268#define EINVAL POSIX_EINVAL
     269#define EIO POSIX_EIO
     270#define EISCONN POSIX_EISCONN
     271#define EISDIR POSIX_EISDIR
     272#define ELOOP POSIX_ELOOP
     273#define EMFILE POSIX_EMFILE
     274#define EMLINK POSIX_EMLINK
     275#define EMSGSIZE POSIX_EMSGSIZE
     276#define EMULTIHOP POSIX_EMULTIHOP
     277#define ENAMETOOLONG POSIX_ENAMETOOLONG
     278#define ENETDOWN POSIX_ENETDOWN
     279#define ENETRESET POSIX_ENETRESET
     280#define ENETUNREACH POSIX_ENETUNREACH
     281#define ENFILE POSIX_ENFILE
     282#define ENOBUFS POSIX_ENOBUFS
     283#define ENODATA POSIX_ENODATA
     284#define ENODEV POSIX_ENODEV
     285#define ENOENT POSIX_ENOENT
     286#define ENOEXEC POSIX_ENOEXEC
     287#define ENOLCK POSIX_ENOLCK
     288#define ENOLINK POSIX_ENOLINK
     289#define ENOMEM POSIX_ENOMEM
     290#define ENOMSG POSIX_ENOMSG
     291#define ENOPROTOOPT POSIX_ENOPROTOOPT
     292#define ENOSPC POSIX_ENOSPC
     293#define ENOSR POSIX_ENOSR
     294#define ENOSTR POSIX_ENOSTR
     295#define ENOSYS POSIX_ENOSYS
     296#define ENOTCONN POSIX_ENOTCONN
     297#define ENOTDIR POSIX_ENOTDIR
     298#define ENOTEMPTY POSIX_ENOTEMPTY
     299#define ENOTRECOVERABLE POSIX_ENOTRECOVERABLE
     300#define ENOTSOCK POSIX_ENOTSOCK
     301#define ENOTSUP POSIX_ENOTSUP
     302#define ENOTTY POSIX_ENOTTY
     303#define ENXIO POSIX_ENXIO
     304#define EOPNOTSUPP POSIX_EOPNOTSUPP
     305#define EOVERFLOW POSIX_EOVERFLOW
     306#define EOWNERDEAD POSIX_EOWNERDEAD
     307#define EPERM POSIX_EPERM
     308#define EPIPE POSIX_EPIPE
     309#define EPROTO POSIX_EPROTO
     310#define EPROTONOSUPPORT POSIX_EPROTONOSUPPORT
     311#define EPROTOTYPE POSIX_EPROTOTYPE
     312#define ERANGE POSIX_ERANGE
     313#define EROFS POSIX_EROFS
     314#define ESPIPE POSIX_ESPIPE
     315#define ESRCH POSIX_ESRCH
     316#define ESTALE POSIX_ESTALE
     317#define ETIME POSIX_ETIME
     318#define ETIMEDOUT POSIX_ETIMEDOUT
     319#define ETXTBSY POSIX_ETXTBSY
     320#define EWOULDBLOCK POSIX_EWOULDBLOCK
     321#define EXDEV POSIX_EXDEV
     322
     323#endif /* POSIX_ERRNO_H_ */
     324
     325/** @}
     326 */
Note: See TracChangeset for help on using the changeset viewer.