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