os/ossrv/genericopenlibs/cstdlib/LSTDIO/STRERROR.C
changeset 0 bde4ae8d615e
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/os/ossrv/genericopenlibs/cstdlib/LSTDIO/STRERROR.C	Fri Jun 15 03:10:57 2012 +0200
     1.3 @@ -0,0 +1,267 @@
     1.4 +/*
     1.5 +* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
     1.6 +* All rights reserved.
     1.7 +* This component and the accompanying materials are made available
     1.8 +* under the terms of "Eclipse Public License v1.0"
     1.9 +* which accompanies this distribution, and is available
    1.10 +* at the URL "http://www.eclipse.org/legal/epl-v10.html".
    1.11 +*
    1.12 +* Initial Contributors:
    1.13 +* Nokia Corporation - initial contribution.
    1.14 +*
    1.15 +* Contributors:
    1.16 +*
    1.17 +* Description:
    1.18 +* *** CAUTION!!! KEEP DOC CONSISTENT---if you change text of a message
    1.19 +* ***            here, change two places:
    1.20 +* ***            1) the leading doc section (alphabetized by macro)
    1.21 +* ***            2) the real text inside switch(errnum)
    1.22 +* FUNCTION
    1.23 +* <<strerror>>---convert error number to string
    1.24 +* INDEX
    1.25 +* strerror
    1.26 +* ANSI_SYNOPSIS
    1.27 +* #include <string.h>
    1.28 +* char *strerror(int <[errnum]>);
    1.29 +* TRAD_SYNOPSIS
    1.30 +* #include <string.h>
    1.31 +* char *strerror(<[errnum]>)
    1.32 +* int <[errnum]>;
    1.33 +* <<strerror>> converts the error number <[errnum]> into a
    1.34 +* string.  The value of <[errnum]> is usually a copy of <<errno>>.
    1.35 +* If <<errnum>> is not a known error number, the result points to an
    1.36 +* empty string.
    1.37 +* RETURNS
    1.38 +* This function returns a pointer to a string.  Your application must
    1.39 +* not modify that string.
    1.40 +* PORTABILITY
    1.41 +* ANSI C requires <<strerror>>, but does not specify the strings used
    1.42 +* for each error number.
    1.43 +* Although this implementation of <<strerror>> is reentrant, ANSI C
    1.44 +* declares that subsequent calls to <<strerror>> may overwrite the
    1.45 +* result string; therefore portable code cannot depend on the reentrancy
    1.46 +* of this subroutine.
    1.47 +* <<strerror>> requires no supporting OS subroutines.
    1.48 +* QUICKREF
    1.49 +* strerror ansi pure
    1.50 +* 
    1.51 +*
    1.52 +*/
    1.53 +
    1.54 +
    1.55 +
    1.56 +#include <errno.h>
    1.57 +#include <string.h>
    1.58 +
    1.59 +/**
    1.60 +Get pointer to error message string.
    1.61 +Returns a pointer to a string with the error message
    1.62 +corresponding to the errnum error number.
    1.63 +The returned pointer points to a statically allocated string. 
    1.64 +Further calls to this function will overwrite its content.
    1.65 +@param errnum Error number.
    1.66 +*/
    1.67 +EXPORT_C char *
    1.68 +strerror (int errnum)
    1.69 +{
    1.70 +  char *error;
    1.71 +
    1.72 +  switch (errnum)
    1.73 +    {
    1.74 +    case EPERM:
    1.75 +      error = "Not owner";
    1.76 +      break;
    1.77 +    case ENOENT:
    1.78 +      error = "No such file or directory";
    1.79 +      break;
    1.80 +    case ESRCH:
    1.81 +      error = "No such process";
    1.82 +      break;
    1.83 +    case EINTR:
    1.84 +      error = "Interrupted system call";
    1.85 +      break;
    1.86 +    case EIO:
    1.87 +      error = "I/O error";
    1.88 +      break;
    1.89 +    case ENXIO:
    1.90 +      error = "No such device or address";
    1.91 +      break;
    1.92 +    case E2BIG:
    1.93 +      error = "Arg list too long";
    1.94 +      break;
    1.95 +    case ENOEXEC:
    1.96 +      error = "Exec format error";
    1.97 +      break;
    1.98 +    case EBADF:
    1.99 +      error = "Bad file number";
   1.100 +      break;
   1.101 +    case ECHILD:
   1.102 +      error = "No children";
   1.103 +      break;
   1.104 +    case EAGAIN:
   1.105 +      error = "No more processes";
   1.106 +      break;
   1.107 +    case ENOMEM:
   1.108 +      error = "Not enough space";
   1.109 +      break;
   1.110 +    case EACCES:
   1.111 +      error = "Permission denied";
   1.112 +      break;
   1.113 +    case EFAULT:
   1.114 +      error = "Bad address";
   1.115 +      break;
   1.116 +    case ENOTBLK:
   1.117 +      error = "Block device required";
   1.118 +      break;
   1.119 +    case EBUSY:
   1.120 +      error = "Device or resource busy";
   1.121 +      break;
   1.122 +    case EEXIST:
   1.123 +      error = "File exists";
   1.124 +      break;
   1.125 +    case EXDEV:
   1.126 +      error = "Cross-device link";
   1.127 +      break;
   1.128 +    case ENODEV:
   1.129 +      error = "No such device";
   1.130 +      break;
   1.131 +    case ENOTDIR:
   1.132 +      error = "Not a directory";
   1.133 +      break;
   1.134 +    case EISDIR:
   1.135 +      error = "Is a directory";
   1.136 +      break;
   1.137 +    case EINVAL:
   1.138 +      error = "Invalid argument";
   1.139 +      break;
   1.140 +    case ENFILE:
   1.141 +      error = "Too many open files in system";
   1.142 +      break;
   1.143 +    case EMFILE:
   1.144 +      error = "Too many open files";
   1.145 +      break;
   1.146 +    case ENOTTY:
   1.147 +      error = "Not a character device";
   1.148 +      break;
   1.149 +    case ETXTBSY:
   1.150 +      error = "Text file busy";
   1.151 +      break;
   1.152 +    case EFBIG:
   1.153 +      error = "File too large";
   1.154 +      break;
   1.155 +    case ENOSPC:
   1.156 +      error = "No space left on device";
   1.157 +      break;
   1.158 +    case ESPIPE:
   1.159 +      error = "Illegal seek";
   1.160 +      break;
   1.161 +    case EROFS:
   1.162 +      error = "Read-only file system";
   1.163 +      break;
   1.164 +    case EMLINK:
   1.165 +      error = "Too many links";
   1.166 +      break;
   1.167 +    case EPIPE:
   1.168 +      error = "Broken pipe";
   1.169 +      break;
   1.170 +    case EDOM:
   1.171 +      error = "Math argument";
   1.172 +      break;
   1.173 +    case ERANGE:
   1.174 +      error = "Result too large";
   1.175 +      break;
   1.176 +    case ENOMSG:
   1.177 +      error = "No message of desired type";
   1.178 +      break;
   1.179 +    case EIDRM:
   1.180 +      error = "Identifier removed";
   1.181 +      break;
   1.182 +    case EDEADLK:
   1.183 +      error = "Deadlock";
   1.184 +      break;
   1.185 +    case ENOLCK:
   1.186 +      error = "No lock";
   1.187 +      break;
   1.188 +    case ENOTSOCK:	error = "Not a socket";				break;
   1.189 +    case EADDRNOTAVAIL:	error = "Remote address not available";		break;
   1.190 +    case EAFNOSUPPORT:	error = "Address not supported by protocol";	break;
   1.191 +    case EISCONN:	error = "Socket already connected";		break;
   1.192 +    case ECONNREFUSED:	error = "Connection refused by remote host";	break;
   1.193 +    case EADDRINUSE:	error = "Address already in use";		break;
   1.194 +    case ETIMEDOUT:	error = "Connection timed out";			break;
   1.195 +    case ENOSTR:
   1.196 +      error = "Not a stream";
   1.197 +      break;
   1.198 +    case ETIME:
   1.199 +      error = "Stream ioctl timeout";
   1.200 +      break;
   1.201 +    case ENOSR:
   1.202 +      error = "No stream resources";
   1.203 +      break;
   1.204 +    case ENONET:
   1.205 +      error = "Machine is not on the network";
   1.206 +      break;
   1.207 +    case ENOPKG:
   1.208 +      error = "No package";
   1.209 +      break;
   1.210 +    case EREMOTE:
   1.211 +      error = "Resource is remote";
   1.212 +      break;
   1.213 +    case ENOLINK:
   1.214 +      error = "Virtual circuit is gone";
   1.215 +      break;
   1.216 +    case EADV:
   1.217 +      error = "Advertise error";
   1.218 +      break;
   1.219 +    case ESRMNT:
   1.220 +      error = "Srmount error";
   1.221 +      break;
   1.222 +    case ECOMM:
   1.223 +      error = "Communication error";
   1.224 +      break;
   1.225 +    case EPROTO:
   1.226 +      error = "Protocol error";
   1.227 +      break;
   1.228 +    case EMULTIHOP:
   1.229 +      error = "Multihop attempted";
   1.230 +      break;
   1.231 +    case EBADMSG:
   1.232 +      error = "Bad message";
   1.233 +      break;
   1.234 +    case ELIBACC:
   1.235 +      error = "Cannot access a needed shared library";
   1.236 +      break;
   1.237 +    case ELIBBAD:
   1.238 +      error = "Accessing a corrupted shared library";
   1.239 +      break;
   1.240 +    case ELIBSCN:
   1.241 +      error = ".lib section in a.out corrupted";
   1.242 +      break;
   1.243 +    case ELIBMAX:
   1.244 +      error = "Attempting to link in more shared libraries than system limit";
   1.245 +      break;
   1.246 +    case ELIBEXEC:
   1.247 +      error = "Cannot exec a shared library directly";
   1.248 +      break;
   1.249 +    case ENOSYS:
   1.250 +      error = "Function not implemented";
   1.251 +      break;
   1.252 +    case ENMFILE:
   1.253 +      error = "No more files";
   1.254 +      break;
   1.255 +    case ENOTEMPTY:
   1.256 +      error = "Directory not empty";
   1.257 +      break;
   1.258 +    case ENAMETOOLONG:
   1.259 +      error = "File or path name too long";
   1.260 +      break;
   1.261 +	case EILSEQ:
   1.262 +	  error = "invalid wide-character encoding";
   1.263 +      break;
   1.264 +	default:
   1.265 +	error = "";
   1.266 +      break;
   1.267 +    }
   1.268 +
   1.269 +  return error;
   1.270 +}