| /* Convert the error number the AIX kernel returns to what the Linux |
| application expects. |
| Copyright (C) 2000 Free Software Foundation, Inc. |
| This file is part of the GNU C Library. |
| |
| The GNU C Library is free software; you can redistribute it and/or |
| modify it under the terms of the GNU Lesser General Public |
| License as published by the Free Software Foundation; either |
| version 2.1 of the License, or (at your option) any later version. |
| |
| The GNU C Library is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| Lesser General Public License for more details. |
| |
| You should have received a copy of the GNU Lesser General Public |
| License along with the GNU C Library; if not, write to the Free |
| Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA |
| 02111-1307 USA. */ |
| |
| #include <errno.h> |
| #include "linux-errno.h" |
| |
| |
| static int mapping[] = |
| { |
| [AIX_EPERM] = EPERM, |
| [AIX_ENOENT] = ENOENT, |
| [AIX_ESRCH] = ESRCH, |
| [AIX_EINTR] = EINTR, |
| [AIX_EIO] = EIO, |
| [AIX_ENXIO] = ENXIO, |
| [AIX_E2BIG] = E2BIG, |
| [AIX_ENOEXEC] = ENOEXEC, |
| [AIX_EBADF] = EBADF, |
| [AIX_ECHILD] = ECHILD, |
| [AIX_EAGAIN] = EAGAIN, |
| [AIX_ENOMEM] = ENOMEM, |
| [AIX_EACCES] = EACCES, |
| [AIX_EFAULT] = EFAULT, |
| [AIX_ENOTBLK] = ENOTBLK, |
| [AIX_EBUSY] = EBUSY, |
| [AIX_EEXIST] = EEXIST, |
| [AIX_EXDEV] = EXDEV, |
| [AIX_ENODEV] = ENODEV, |
| [AIX_ENOTDIR] = ENOTDIR, |
| [AIX_EISDIR] = EISDIR, |
| [AIX_EINVAL] = EINVAL, |
| [AIX_ENFILE] = ENFILE, |
| [AIX_EMFILE] = EMFILE, |
| [AIX_ENOTTY] = ENOTTY, |
| [AIX_ETXTBSY] = ETXTBSY, |
| [AIX_EFBIG] = EFBIG, |
| [AIX_ENOSPC] = ENOSPC, |
| [AIX_EIDRM] = EIDRM, |
| [AIX_ECHRNG] = ECHRNG, |
| [AIX_EL2NSYNC] = EL2NSYNC, |
| [AIX_EL3HLT] = EL3HLT, |
| [AIX_EL3RST] = EL3RST, |
| [AIX_ELNRNG] = ELNRNG, |
| [AIX_EUNATCH] = EUNATCH, |
| [AIX_ENOCSI] = ENOCSI, |
| [AIX_EL2HLT] = EL2HLT, |
| [AIX_EDEADLK] = EDEADLK, |
| [AIX_ENOTREADY] = ENOTREADY, |
| // EWPROTECT: no Linux equivalent |
| // EFORMAT: no Linux equivalent |
| [AIX_ENOLCK] = ENOLCK, |
| // ENOCONNECT: No Linux equivalent |
| [AIX_ESTALE] = ESTALE, |
| // EDIST: no Linux equivalent |
| [54] = EAGAIN, // EWOULDBLOCK |
| [AIX_EINPROGRESS] = EINPROGRESS, |
| [AIX_EALREADY] = EALREADY, |
| [AIX_ENOTSOCK] = ENOTSOCK, |
| [AIX_EDESTADDRREQ] = EDESTADDRREQ, |
| [AIX_EMSGSIZE] = EMSGSIZE, |
| [AIX_EPROTOTYPE] = EPROTOTYPE, |
| [AIX_ENOPROTOOPT] = ENOPROTOOPT, |
| [AIX_EPROTONOSUPPORT] = EPROTONOSUPPORT, |
| [AIX_ESOCKTNOSUPPORT] = ESOCKTNOSUPPORT, |
| [AIX_EOPNOTSUPP] = EOPNOTSUPP, |
| [AIX_EPFNOSUPPORT] = EPFNOSUPPORT, |
| [AIX_EAFNOSUPPORT] = EAFNOSUPPORT, |
| [AIX_EADDRINUSE] = EADDRINUSE, |
| [AIX_EADDRNOTAVAIL] = EADDRNOTAVAIL, |
| [AIX_ENETDOWN] = ENETDOWN, |
| [AIX_ENETUNREACH] = ENETUNREACH, |
| [AIX_ENETRESET] = ENETRESET, |
| [AIX_ECONNABORTED] = ECONNABORTED, |
| [AIX_ECONNRESET] = ECONNRESET, |
| [AIX_ENOBUFS] = ENOBUFS, |
| [AIX_EISCONN] = EISCONN, |
| [AIX_ENOTCONN] = ENOTCONN, |
| [AIX_ESHUTDOWN] = ESHUTDOWN, |
| [AIX_ETIMEDOUT] = ETIMEDOUT, |
| [AIX_ECONNREFUSED] = ECONNREFUSED, |
| [AIX_EHOSTDOWN] = EHOSTDOWN, |
| [AIX_EHOSTUNREACH] = EHOSTUNREACH, |
| [AIX_ERESTART] = ERESTART, |
| [AIX_EPROCLIM] = EPROCLIM, |
| [AIX_EUSERS] = EUSERS, |
| [AIX_ELOOP] = ELOOP, |
| [AIX_ENAMETOOLONG] = ENAMETOOLONG, |
| [87] = ENOTEMPTY, // ENOTEMPTY |
| [AIX_EDQUOT] = EDQUOT, |
| [AIX_ECORRUPT] = ECORRUPT, |
| [AIX_EREMOTE] = EREMOTE, |
| [AIX_ENOSYS] = ENOSYS, |
| [AIX_EMEDIA] = EMEDIA, |
| [AIX_ESOFT] = ESOFT, |
| [AIX_ENOATTR] = ENOATTR, |
| [AIX_ESAD] = ESAD, |
| // ENOTRUST: no Linux equivalent |
| [AIX_ETOOMANYREFS] = ETOOMANYREFS, |
| [AIX_EILSEQ] = EILSEQ, |
| [AIX_ECANCELED] = ECANCELED, |
| [AIX_ENOSR] = ENOSR, |
| [AIX_ETIME] = ETIME, |
| [AIX_EBADMSG] = EBADMSG, |
| [AIX_EPROTO] = EPROTO, |
| [AIX_ENODATA] = ENODATA, |
| [AIX_ENOSTR] = ENOSTR, |
| [AIX_ENOTSUP] = ENOTSUP, |
| [AIX_EMULTIHOP] = EMULTIHOP, |
| [AIX_ENOLINK] = ENOLINK, |
| [AIX_EOVERFLOW] = EOVERFLOW |
| }; |
| |
| |
| int |
| __errno_aix_to_linux (int err) |
| { |
| int conv; |
| |
| if (err >= 0 && err < (sizeof (mapping) / sizeof (mapping[0])) |
| && ((conv = mapping[err]) != 0 || err == 0)) |
| return conv; |
| |
| /* The error value is not known. Create a special value which can |
| be easily recognized as an invalid result. */ |
| return 512 + err; |
| } |