Annotation of embedaddon/libiconv/srclib/strerror.c, revision 1.1.1.1

1.1       misho       1: /* strerror.c --- POSIX compatible system error routine
                      2: 
                      3:    Copyright (C) 2007-2009 Free Software Foundation, Inc.
                      4: 
                      5:    This program is free software: you can redistribute it and/or modify
                      6:    it under the terms of the GNU General Public License as published by
                      7:    the Free Software Foundation; either version 3 of the License, or
                      8:    (at your option) any later version.
                      9: 
                     10:    This program is distributed in the hope that it will be useful,
                     11:    but WITHOUT ANY WARRANTY; without even the implied warranty of
                     12:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     13:    GNU General Public License for more details.
                     14: 
                     15:    You should have received a copy of the GNU General Public License
                     16:    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
                     17: 
                     18: #include <config.h>
                     19: 
                     20: #include <string.h>
                     21: 
                     22: #if REPLACE_STRERROR
                     23: 
                     24: # include <errno.h>
                     25: # include <stdio.h>
                     26: 
                     27: # if GNULIB_defined_ESOCK /* native Windows platforms */
                     28: #  if HAVE_WINSOCK2_H
                     29: #   include <winsock2.h>
                     30: #  endif
                     31: # endif
                     32: 
                     33: # include "intprops.h"
                     34: 
                     35: # undef strerror
                     36: # if ! HAVE_DECL_STRERROR
                     37: #  define strerror(n) NULL
                     38: # endif
                     39: 
                     40: char *
                     41: rpl_strerror (int n)
                     42: {
                     43:   char const *msg = NULL;
                     44:   /* These error messages are taken from glibc/sysdeps/gnu/errlist.c.  */
                     45:   switch (n)
                     46:     {
                     47: # if GNULIB_defined_ETXTBSY
                     48:     case ETXTBSY:
                     49:       msg = "Text file busy";
                     50:       break;
                     51: # endif
                     52: 
                     53: # if GNULIB_defined_ESOCK /* native Windows platforms */
                     54:     /* EWOULDBLOCK is the same as EAGAIN.  */
                     55:     case EINPROGRESS:
                     56:       msg = "Operation now in progress";
                     57:       break;
                     58:     case EALREADY:
                     59:       msg = "Operation already in progress";
                     60:       break;
                     61:     case ENOTSOCK:
                     62:       msg = "Socket operation on non-socket";
                     63:       break;
                     64:     case EDESTADDRREQ:
                     65:       msg = "Destination address required";
                     66:       break;
                     67:     case EMSGSIZE:
                     68:       msg = "Message too long";
                     69:       break;
                     70:     case EPROTOTYPE:
                     71:       msg = "Protocol wrong type for socket";
                     72:       break;
                     73:     case ENOPROTOOPT:
                     74:       msg = "Protocol not available";
                     75:       break;
                     76:     case EPROTONOSUPPORT:
                     77:       msg = "Protocol not supported";
                     78:       break;
                     79:     case ESOCKTNOSUPPORT:
                     80:       msg = "Socket type not supported";
                     81:       break;
                     82:     case EOPNOTSUPP:
                     83:       msg = "Operation not supported";
                     84:       break;
                     85:     case EPFNOSUPPORT:
                     86:       msg = "Protocol family not supported";
                     87:       break;
                     88:     case EAFNOSUPPORT:
                     89:       msg = "Address family not supported by protocol";
                     90:       break;
                     91:     case EADDRINUSE:
                     92:       msg = "Address already in use";
                     93:       break;
                     94:     case EADDRNOTAVAIL:
                     95:       msg = "Cannot assign requested address";
                     96:       break;
                     97:     case ENETDOWN:
                     98:       msg = "Network is down";
                     99:       break;
                    100:     case ENETUNREACH:
                    101:       msg = "Network is unreachable";
                    102:       break;
                    103:     case ENETRESET:
                    104:       msg = "Network dropped connection on reset";
                    105:       break;
                    106:     case ECONNABORTED:
                    107:       msg = "Software caused connection abort";
                    108:       break;
                    109:     case ECONNRESET:
                    110:       msg = "Connection reset by peer";
                    111:       break;
                    112:     case ENOBUFS:
                    113:       msg = "No buffer space available";
                    114:       break;
                    115:     case EISCONN:
                    116:       msg = "Transport endpoint is already connected";
                    117:       break;
                    118:     case ENOTCONN:
                    119:       msg = "Transport endpoint is not connected";
                    120:       break;
                    121:     case ESHUTDOWN:
                    122:       msg = "Cannot send after transport endpoint shutdown";
                    123:       break;
                    124:     case ETOOMANYREFS:
                    125:       msg = "Too many references: cannot splice";
                    126:       break;
                    127:     case ETIMEDOUT:
                    128:       msg = "Connection timed out";
                    129:       break;
                    130:     case ECONNREFUSED:
                    131:       msg = "Connection refused";
                    132:       break;
                    133:     case ELOOP:
                    134:       msg = "Too many levels of symbolic links";
                    135:       break;
                    136:     case EHOSTDOWN:
                    137:       msg = "Host is down";
                    138:       break;
                    139:     case EHOSTUNREACH:
                    140:       msg = "No route to host";
                    141:       break;
                    142:     case EPROCLIM:
                    143:       msg = "Too many processes";
                    144:       break;
                    145:     case EUSERS:
                    146:       msg = "Too many users";
                    147:       break;
                    148:     case EDQUOT:
                    149:       msg = "Disk quota exceeded";
                    150:       break;
                    151:     case ESTALE:
                    152:       msg = "Stale NFS file handle";
                    153:       break;
                    154:     case EREMOTE:
                    155:       msg = "Object is remote";
                    156:       break;
                    157: #  if HAVE_WINSOCK2_H
                    158:     /* WSA_INVALID_HANDLE maps to EBADF */
                    159:     /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */
                    160:     /* WSA_INVALID_PARAMETER maps to EINVAL */
                    161:     case WSA_OPERATION_ABORTED:
                    162:       msg = "Overlapped operation aborted";
                    163:       break;
                    164:     case WSA_IO_INCOMPLETE:
                    165:       msg = "Overlapped I/O event object not in signaled state";
                    166:       break;
                    167:     case WSA_IO_PENDING:
                    168:       msg = "Overlapped operations will complete later";
                    169:       break;
                    170:     /* WSAEINTR maps to EINTR */
                    171:     /* WSAEBADF maps to EBADF */
                    172:     /* WSAEACCES maps to EACCES */
                    173:     /* WSAEFAULT maps to EFAULT */
                    174:     /* WSAEINVAL maps to EINVAL */
                    175:     /* WSAEMFILE maps to EMFILE */
                    176:     /* WSAEWOULDBLOCK maps to EWOULDBLOCK */
                    177:     /* WSAEINPROGRESS is EINPROGRESS */
                    178:     /* WSAEALREADY is EALREADY */
                    179:     /* WSAENOTSOCK is ENOTSOCK */
                    180:     /* WSAEDESTADDRREQ is EDESTADDRREQ */
                    181:     /* WSAEMSGSIZE is EMSGSIZE */
                    182:     /* WSAEPROTOTYPE is EPROTOTYPE */
                    183:     /* WSAENOPROTOOPT is ENOPROTOOPT */
                    184:     /* WSAEPROTONOSUPPORT is EPROTONOSUPPORT */
                    185:     /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */
                    186:     /* WSAEOPNOTSUPP is EOPNOTSUPP */
                    187:     /* WSAEPFNOSUPPORT is EPFNOSUPPORT */
                    188:     /* WSAEAFNOSUPPORT is EAFNOSUPPORT */
                    189:     /* WSAEADDRINUSE is EADDRINUSE */
                    190:     /* WSAEADDRNOTAVAIL is EADDRNOTAVAIL */
                    191:     /* WSAENETDOWN is ENETDOWN */
                    192:     /* WSAENETUNREACH is ENETUNREACH */
                    193:     /* WSAENETRESET is ENETRESET */
                    194:     /* WSAECONNABORTED is ECONNABORTED */
                    195:     /* WSAECONNRESET is ECONNRESET */
                    196:     /* WSAENOBUFS is ENOBUFS */
                    197:     /* WSAEISCONN is EISCONN */
                    198:     /* WSAENOTCONN is ENOTCONN */
                    199:     /* WSAESHUTDOWN is ESHUTDOWN */
                    200:     /* WSAETOOMANYREFS is ETOOMANYREFS */
                    201:     /* WSAETIMEDOUT is ETIMEDOUT */
                    202:     /* WSAECONNREFUSED is ECONNREFUSED */
                    203:     /* WSAELOOP is ELOOP */
                    204:     /* WSAENAMETOOLONG maps to ENAMETOOLONG */
                    205:     /* WSAEHOSTDOWN is EHOSTDOWN */
                    206:     /* WSAEHOSTUNREACH is EHOSTUNREACH */
                    207:     /* WSAENOTEMPTY maps to ENOTEMPTY */
                    208:     /* WSAEPROCLIM is EPROCLIM */
                    209:     /* WSAEUSERS is EUSERS */
                    210:     /* WSAEDQUOT is EDQUOT */
                    211:     /* WSAESTALE is ESTALE */
                    212:     /* WSAEREMOTE is EREMOTE */
                    213:     case WSASYSNOTREADY:
                    214:       msg = "Network subsystem is unavailable";
                    215:       break;
                    216:     case WSAVERNOTSUPPORTED:
                    217:       msg = "Winsock.dll version out of range";
                    218:       break;
                    219:     case WSANOTINITIALISED:
                    220:       msg = "Successful WSAStartup not yet performed";
                    221:       break;
                    222:     case WSAEDISCON:
                    223:       msg = "Graceful shutdown in progress";
                    224:       break;
                    225:     case WSAENOMORE: case WSA_E_NO_MORE:
                    226:       msg = "No more results";
                    227:       break;
                    228:     case WSAECANCELLED: case WSA_E_CANCELLED:
                    229:       msg = "Call was canceled";
                    230:       break;
                    231:     case WSAEINVALIDPROCTABLE:
                    232:       msg = "Procedure call table is invalid";
                    233:       break;
                    234:     case WSAEINVALIDPROVIDER:
                    235:       msg = "Service provider is invalid";
                    236:       break;
                    237:     case WSAEPROVIDERFAILEDINIT:
                    238:       msg = "Service provider failed to initialize";
                    239:       break;
                    240:     case WSASYSCALLFAILURE:
                    241:       msg = "System call failure";
                    242:       break;
                    243:     case WSASERVICE_NOT_FOUND:
                    244:       msg = "Service not found";
                    245:       break;
                    246:     case WSATYPE_NOT_FOUND:
                    247:       msg = "Class type not found";
                    248:       break;
                    249:     case WSAEREFUSED:
                    250:       msg = "Database query was refused";
                    251:       break;
                    252:     case WSAHOST_NOT_FOUND:
                    253:       msg = "Host not found";
                    254:       break;
                    255:     case WSATRY_AGAIN:
                    256:       msg = "Nonauthoritative host not found";
                    257:       break;
                    258:     case WSANO_RECOVERY:
                    259:       msg = "Nonrecoverable error";
                    260:       break;
                    261:     case WSANO_DATA:
                    262:       msg = "Valid name, no data record of requested type";
                    263:       break;
                    264:     /* WSA_QOS_* omitted */
                    265: #  endif
                    266: # endif
                    267: 
                    268: # if GNULIB_defined_ENOMSG
                    269:     case ENOMSG:
                    270:       msg = "No message of desired type";
                    271:       break;
                    272: # endif
                    273: 
                    274: # if GNULIB_defined_EIDRM
                    275:     case EIDRM:
                    276:       msg = "Identifier removed";
                    277:       break;
                    278: # endif
                    279: 
                    280: # if GNULIB_defined_ENOLINK
                    281:     case ENOLINK:
                    282:       msg = "Link has been severed";
                    283:       break;
                    284: # endif
                    285: 
                    286: # if GNULIB_defined_EPROTO
                    287:     case EPROTO:
                    288:       msg = "Protocol error";
                    289:       break;
                    290: # endif
                    291: 
                    292: # if GNULIB_defined_EMULTIHOP
                    293:     case EMULTIHOP:
                    294:       msg = "Multihop attempted";
                    295:       break;
                    296: # endif
                    297: 
                    298: # if GNULIB_defined_EBADMSG
                    299:     case EBADMSG:
                    300:       msg = "Bad message";
                    301:       break;
                    302: # endif
                    303: 
                    304: # if GNULIB_defined_EOVERFLOW
                    305:     case EOVERFLOW:
                    306:       msg = "Value too large for defined data type";
                    307:       break;
                    308: # endif
                    309: 
                    310: # if GNULIB_defined_ENOTSUP
                    311:     case ENOTSUP:
                    312:       msg = "Not supported";
                    313:       break;
                    314: # endif
                    315: 
                    316: # if GNULIB_defined_ESTALE
                    317:     case ESTALE:
                    318:       msg = "Stale NFS file handle";
                    319:       break;
                    320: # endif
                    321: 
                    322: # if GNULIB_defined_ECANCELED
                    323:     case ECANCELED:
                    324:       msg = "Operation canceled";
                    325:       break;
                    326: # endif
                    327:     }
                    328: 
                    329:   if (msg)
                    330:     return (char *) msg;
                    331: 
                    332:   {
                    333:     char *result = strerror (n);
                    334: 
                    335:     if (result == NULL || result[0] == '\0')
                    336:       {
                    337:        static char const fmt[] = "Unknown error (%d)";
                    338:        static char msg_buf[sizeof fmt + INT_STRLEN_BOUND (n)];
                    339:        sprintf (msg_buf, fmt, n);
                    340:        return msg_buf;
                    341:       }
                    342: 
                    343:     return result;
                    344:   }
                    345: }
                    346: 
                    347: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>