os/ossrv/genericopenlibs/cstdlib/LSTDIO/STRERROR.C
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 /*
     2 * Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     5 * under the terms of "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     8 *
     9 * Initial Contributors:
    10 * Nokia Corporation - initial contribution.
    11 *
    12 * Contributors:
    13 *
    14 * Description:
    15 * *** CAUTION!!! KEEP DOC CONSISTENT---if you change text of a message
    16 * ***            here, change two places:
    17 * ***            1) the leading doc section (alphabetized by macro)
    18 * ***            2) the real text inside switch(errnum)
    19 * FUNCTION
    20 * <<strerror>>---convert error number to string
    21 * INDEX
    22 * strerror
    23 * ANSI_SYNOPSIS
    24 * #include <string.h>
    25 * char *strerror(int <[errnum]>);
    26 * TRAD_SYNOPSIS
    27 * #include <string.h>
    28 * char *strerror(<[errnum]>)
    29 * int <[errnum]>;
    30 * <<strerror>> converts the error number <[errnum]> into a
    31 * string.  The value of <[errnum]> is usually a copy of <<errno>>.
    32 * If <<errnum>> is not a known error number, the result points to an
    33 * empty string.
    34 * RETURNS
    35 * This function returns a pointer to a string.  Your application must
    36 * not modify that string.
    37 * PORTABILITY
    38 * ANSI C requires <<strerror>>, but does not specify the strings used
    39 * for each error number.
    40 * Although this implementation of <<strerror>> is reentrant, ANSI C
    41 * declares that subsequent calls to <<strerror>> may overwrite the
    42 * result string; therefore portable code cannot depend on the reentrancy
    43 * of this subroutine.
    44 * <<strerror>> requires no supporting OS subroutines.
    45 * QUICKREF
    46 * strerror ansi pure
    47 * 
    48 *
    49 */
    50 
    51 
    52 
    53 #include <errno.h>
    54 #include <string.h>
    55 
    56 /**
    57 Get pointer to error message string.
    58 Returns a pointer to a string with the error message
    59 corresponding to the errnum error number.
    60 The returned pointer points to a statically allocated string. 
    61 Further calls to this function will overwrite its content.
    62 @param errnum Error number.
    63 */
    64 EXPORT_C char *
    65 strerror (int errnum)
    66 {
    67   char *error;
    68 
    69   switch (errnum)
    70     {
    71     case EPERM:
    72       error = "Not owner";
    73       break;
    74     case ENOENT:
    75       error = "No such file or directory";
    76       break;
    77     case ESRCH:
    78       error = "No such process";
    79       break;
    80     case EINTR:
    81       error = "Interrupted system call";
    82       break;
    83     case EIO:
    84       error = "I/O error";
    85       break;
    86     case ENXIO:
    87       error = "No such device or address";
    88       break;
    89     case E2BIG:
    90       error = "Arg list too long";
    91       break;
    92     case ENOEXEC:
    93       error = "Exec format error";
    94       break;
    95     case EBADF:
    96       error = "Bad file number";
    97       break;
    98     case ECHILD:
    99       error = "No children";
   100       break;
   101     case EAGAIN:
   102       error = "No more processes";
   103       break;
   104     case ENOMEM:
   105       error = "Not enough space";
   106       break;
   107     case EACCES:
   108       error = "Permission denied";
   109       break;
   110     case EFAULT:
   111       error = "Bad address";
   112       break;
   113     case ENOTBLK:
   114       error = "Block device required";
   115       break;
   116     case EBUSY:
   117       error = "Device or resource busy";
   118       break;
   119     case EEXIST:
   120       error = "File exists";
   121       break;
   122     case EXDEV:
   123       error = "Cross-device link";
   124       break;
   125     case ENODEV:
   126       error = "No such device";
   127       break;
   128     case ENOTDIR:
   129       error = "Not a directory";
   130       break;
   131     case EISDIR:
   132       error = "Is a directory";
   133       break;
   134     case EINVAL:
   135       error = "Invalid argument";
   136       break;
   137     case ENFILE:
   138       error = "Too many open files in system";
   139       break;
   140     case EMFILE:
   141       error = "Too many open files";
   142       break;
   143     case ENOTTY:
   144       error = "Not a character device";
   145       break;
   146     case ETXTBSY:
   147       error = "Text file busy";
   148       break;
   149     case EFBIG:
   150       error = "File too large";
   151       break;
   152     case ENOSPC:
   153       error = "No space left on device";
   154       break;
   155     case ESPIPE:
   156       error = "Illegal seek";
   157       break;
   158     case EROFS:
   159       error = "Read-only file system";
   160       break;
   161     case EMLINK:
   162       error = "Too many links";
   163       break;
   164     case EPIPE:
   165       error = "Broken pipe";
   166       break;
   167     case EDOM:
   168       error = "Math argument";
   169       break;
   170     case ERANGE:
   171       error = "Result too large";
   172       break;
   173     case ENOMSG:
   174       error = "No message of desired type";
   175       break;
   176     case EIDRM:
   177       error = "Identifier removed";
   178       break;
   179     case EDEADLK:
   180       error = "Deadlock";
   181       break;
   182     case ENOLCK:
   183       error = "No lock";
   184       break;
   185     case ENOTSOCK:	error = "Not a socket";				break;
   186     case EADDRNOTAVAIL:	error = "Remote address not available";		break;
   187     case EAFNOSUPPORT:	error = "Address not supported by protocol";	break;
   188     case EISCONN:	error = "Socket already connected";		break;
   189     case ECONNREFUSED:	error = "Connection refused by remote host";	break;
   190     case EADDRINUSE:	error = "Address already in use";		break;
   191     case ETIMEDOUT:	error = "Connection timed out";			break;
   192     case ENOSTR:
   193       error = "Not a stream";
   194       break;
   195     case ETIME:
   196       error = "Stream ioctl timeout";
   197       break;
   198     case ENOSR:
   199       error = "No stream resources";
   200       break;
   201     case ENONET:
   202       error = "Machine is not on the network";
   203       break;
   204     case ENOPKG:
   205       error = "No package";
   206       break;
   207     case EREMOTE:
   208       error = "Resource is remote";
   209       break;
   210     case ENOLINK:
   211       error = "Virtual circuit is gone";
   212       break;
   213     case EADV:
   214       error = "Advertise error";
   215       break;
   216     case ESRMNT:
   217       error = "Srmount error";
   218       break;
   219     case ECOMM:
   220       error = "Communication error";
   221       break;
   222     case EPROTO:
   223       error = "Protocol error";
   224       break;
   225     case EMULTIHOP:
   226       error = "Multihop attempted";
   227       break;
   228     case EBADMSG:
   229       error = "Bad message";
   230       break;
   231     case ELIBACC:
   232       error = "Cannot access a needed shared library";
   233       break;
   234     case ELIBBAD:
   235       error = "Accessing a corrupted shared library";
   236       break;
   237     case ELIBSCN:
   238       error = ".lib section in a.out corrupted";
   239       break;
   240     case ELIBMAX:
   241       error = "Attempting to link in more shared libraries than system limit";
   242       break;
   243     case ELIBEXEC:
   244       error = "Cannot exec a shared library directly";
   245       break;
   246     case ENOSYS:
   247       error = "Function not implemented";
   248       break;
   249     case ENMFILE:
   250       error = "No more files";
   251       break;
   252     case ENOTEMPTY:
   253       error = "Directory not empty";
   254       break;
   255     case ENAMETOOLONG:
   256       error = "File or path name too long";
   257       break;
   258 	case EILSEQ:
   259 	  error = "invalid wide-character encoding";
   260       break;
   261 	default:
   262 	error = "";
   263       break;
   264     }
   265 
   266   return error;
   267 }