|
|
1.1 ! root 1: /* ! 2: * strerror.c -- ! 3: * ! 4: * Source code for the "strerror" library routine. ! 5: * ! 6: * Copyright 1988-1991 Regents of the University of California ! 7: * Permission to use, copy, modify, and distribute this ! 8: * software and its documentation for any purpose and without ! 9: * fee is hereby granted, provided that the above copyright ! 10: * notice appears in all copies. The University of California ! 11: * makes no representations about the suitability of this ! 12: * software for any purpose. It is provided "as is" without ! 13: * express or implied warranty. ! 14: */ ! 15: ! 16: #ifndef lint ! 17: static char rcsid[] = "$Header: /user6/ouster/tcl/compat/RCS/strerror.c,v 1.2 91/12/16 09:26:48 ouster Exp $ SPRITE (Berkeley)"; ! 18: #endif /* not lint */ ! 19: ! 20: #include <tclint.h> ! 21: #include <tclunix.h> ! 22: ! 23: /* ! 24: *---------------------------------------------------------------------- ! 25: * ! 26: * strerror -- ! 27: * ! 28: * Map an integer error number into a printable string. ! 29: * ! 30: * Results: ! 31: * The return value is a pointer to a string describing ! 32: * error. The first character of string isn't capitalized. ! 33: * ! 34: * Side effects: ! 35: * Each call to this procedure may overwrite the value returned ! 36: * by the previous call. ! 37: * ! 38: *---------------------------------------------------------------------- ! 39: */ ! 40: ! 41: char * ! 42: strerror(error) ! 43: int error; /* Integer identifying error (must be ! 44: * one of the officially-defined Sprite ! 45: * errors, as defined in errno.h). */ ! 46: { ! 47: static char msg[50]; ! 48: ! 49: #if TCL_SYS_ERRLIST ! 50: if ((error <= sys_nerr) && (error > 0)) { ! 51: return sys_errlist[error]; ! 52: } ! 53: #else ! 54: switch (error) { ! 55: #ifdef E2BIG ! 56: case E2BIG: return "argument list too long"; ! 57: #endif ! 58: #ifdef EACCES ! 59: case EACCES: return "permission denied"; ! 60: #endif ! 61: #ifdef EADDRINUSE ! 62: case EADDRINUSE: return "address already in use"; ! 63: #endif ! 64: #ifdef EADDRNOTAVAIL ! 65: case EADDRNOTAVAIL: return "can't assign requested address"; ! 66: #endif ! 67: #ifdef EADV ! 68: case EADV: return "advertise error"; ! 69: #endif ! 70: #ifdef EAFNOSUPPORT ! 71: case EAFNOSUPPORT: return "address family not supported by protocol family"; ! 72: #endif ! 73: #ifdef EAGAIN ! 74: case EAGAIN: return "no more processes"; ! 75: #endif ! 76: #ifdef EALIGN ! 77: case EALIGN: return "EALIGN"; ! 78: #endif ! 79: #ifdef EALREADY ! 80: case EALREADY: return "operation already in progress"; ! 81: #endif ! 82: #ifdef EBADE ! 83: case EBADE: return "bad exchange descriptor"; ! 84: #endif ! 85: #ifdef EBADF ! 86: case EBADF: return "bad file number"; ! 87: #endif ! 88: #ifdef EBADFD ! 89: case EBADFD: return "file descriptor in bad state"; ! 90: #endif ! 91: #ifdef EBADMSG ! 92: case EBADMSG: return "not a data message"; ! 93: #endif ! 94: #ifdef EBADR ! 95: case EBADR: return "bad request descriptor"; ! 96: #endif ! 97: #ifdef EBADRPC ! 98: case EBADRPC: return "RPC structure is bad"; ! 99: #endif ! 100: #ifdef EBADRQC ! 101: case EBADRQC: return "bad request code"; ! 102: #endif ! 103: #ifdef EBADSLT ! 104: case EBADSLT: return "invalid slot"; ! 105: #endif ! 106: #ifdef EBFONT ! 107: case EBFONT: return "bad font file format"; ! 108: #endif ! 109: #ifdef EBUSY ! 110: case EBUSY: return "mount device busy"; ! 111: #endif ! 112: #ifdef ECHILD ! 113: case ECHILD: return "no children"; ! 114: #endif ! 115: #ifdef ECHRNG ! 116: case ECHRNG: return "channel number out of range"; ! 117: #endif ! 118: #ifdef ECOMM ! 119: case ECOMM: return "communication error on send"; ! 120: #endif ! 121: #ifdef ECONNABORTED ! 122: case ECONNABORTED: return "software caused connection abort"; ! 123: #endif ! 124: #ifdef ECONNREFUSED ! 125: case ECONNREFUSED: return "connection refused"; ! 126: #endif ! 127: #ifdef ECONNRESET ! 128: case ECONNRESET: return "connection reset by peer"; ! 129: #endif ! 130: #if defined(EDEADLK) && (!defined(EWOULDBLOCK) || (EDEADLK != EWOULDBLOCK)) ! 131: case EDEADLK: return "resource deadlock avoided"; ! 132: #endif ! 133: #ifdef EDEADLOCK ! 134: case EDEADLOCK: return "resource deadlock avoided"; ! 135: #endif ! 136: #ifdef EDESTADDRREQ ! 137: case EDESTADDRREQ: return "destination address required"; ! 138: #endif ! 139: #ifdef EDIRTY ! 140: case EDIRTY: return "mounting a dirty fs w/o force"; ! 141: #endif ! 142: #ifdef EDOM ! 143: case EDOM: return "math argument out of range"; ! 144: #endif ! 145: #ifdef EDOTDOT ! 146: case EDOTDOT: return "cross mount point"; ! 147: #endif ! 148: #ifdef EDQUOT ! 149: case EDQUOT: return "disk quota exceeded"; ! 150: #endif ! 151: #ifdef EDUPPKG ! 152: case EDUPPKG: return "duplicate package name"; ! 153: #endif ! 154: #ifdef EEXIST ! 155: case EEXIST: return "file already exists"; ! 156: #endif ! 157: #ifdef EFAULT ! 158: case EFAULT: return "bad address in system call argument"; ! 159: #endif ! 160: #ifdef EFBIG ! 161: case EFBIG: return "file too large"; ! 162: #endif ! 163: #ifdef EHOSTDOWN ! 164: case EHOSTDOWN: return "host is down"; ! 165: #endif ! 166: #ifdef EHOSTUNREACH ! 167: case EHOSTUNREACH: return "host is unreachable"; ! 168: #endif ! 169: #ifdef EIDRM ! 170: case EIDRM: return "identifier removed"; ! 171: #endif ! 172: #ifdef EINIT ! 173: case EINIT: return "initialization error"; ! 174: #endif ! 175: #ifdef EINPROGRESS ! 176: case EINPROGRESS: return "operation now in progress"; ! 177: #endif ! 178: #ifdef EINTR ! 179: case EINTR: return "interrupted system call"; ! 180: #endif ! 181: #ifdef EINVAL ! 182: case EINVAL: return "invalid argument"; ! 183: #endif ! 184: #ifdef EIO ! 185: case EIO: return "I/O error"; ! 186: #endif ! 187: #ifdef EISCONN ! 188: case EISCONN: return "socket is already connected"; ! 189: #endif ! 190: #ifdef EISDIR ! 191: case EISDIR: return "illegal operation on a directory"; ! 192: #endif ! 193: #ifdef EISNAME ! 194: case EISNAM: return "is a name file"; ! 195: #endif ! 196: #ifdef ELBIN ! 197: case ELBIN: return "ELBIN"; ! 198: #endif ! 199: #ifdef EL2HLT ! 200: case EL2HLT: return "level 2 halted"; ! 201: #endif ! 202: #ifdef EL2NSYNC ! 203: case EL2NSYNC: return "level 2 not synchronized"; ! 204: #endif ! 205: #ifdef EL3HLT ! 206: case EL3HLT: return "level 3 halted"; ! 207: #endif ! 208: #ifdef EL3RST ! 209: case EL3RST: return "level 3 reset"; ! 210: #endif ! 211: #ifdef ELIBACC ! 212: case ELIBACC: return "can not access a needed shared library"; ! 213: #endif ! 214: #ifdef ELIBBAD ! 215: case ELIBBAD: return "accessing a corrupted shared library"; ! 216: #endif ! 217: #ifdef ELIBEXEC ! 218: case ELIBEXEC: return "can not exec a shared library directly"; ! 219: #endif ! 220: #ifdef ELIBMAX ! 221: case ELIBMAX: return ! 222: "attempting to link in more shared libraries than system limit"; ! 223: #endif ! 224: #ifdef ELIBSCN ! 225: case ELIBSCN: return ".lib section in a.out corrupted"; ! 226: #endif ! 227: #ifdef ELNRNG ! 228: case ELNRNG: return "link number out of range"; ! 229: #endif ! 230: #ifdef ELOOP ! 231: case ELOOP: return "too many levels of symbolic links"; ! 232: #endif ! 233: #ifdef EMFILE ! 234: case EMFILE: return "too many open files"; ! 235: #endif ! 236: #ifdef EMLINK ! 237: case EMLINK: return "too many links"; ! 238: #endif ! 239: #ifdef EMSGSIZE ! 240: case EMSGSIZE: return "message too long"; ! 241: #endif ! 242: #ifdef EMULTIHOP ! 243: case EMULTIHOP: return "multihop attempted"; ! 244: #endif ! 245: #ifdef ENAMETOOLONG ! 246: case ENAMETOOLONG: return "file name too long"; ! 247: #endif ! 248: #ifdef ENAVAIL ! 249: case ENAVAIL: return "not available"; ! 250: #endif ! 251: #ifdef ENET ! 252: case ENET: return "ENET"; ! 253: #endif ! 254: #ifdef ENETDOWN ! 255: case ENETDOWN: return "network is down"; ! 256: #endif ! 257: #ifdef ENETRESET ! 258: case ENETRESET: return "network dropped connection on reset"; ! 259: #endif ! 260: #ifdef ENETUNREACH ! 261: case ENETUNREACH: return "network is unreachable"; ! 262: #endif ! 263: #ifdef ENFILE ! 264: case ENFILE: return "file table overflow"; ! 265: #endif ! 266: #ifdef ENOANO ! 267: case ENOANO: return "anode table overflow"; ! 268: #endif ! 269: #if defined(ENOBUFS) && (!defined(ENOSR) || (ENOBUFS != ENOSR)) ! 270: case ENOBUFS: return "no buffer space available"; ! 271: #endif ! 272: #ifdef ENOCSI ! 273: case ENOCSI: return "no CSI structure available"; ! 274: #endif ! 275: #ifdef ENODATA ! 276: case ENODATA: return "no data available"; ! 277: #endif ! 278: #ifdef ENODEV ! 279: case ENODEV: return "no such device"; ! 280: #endif ! 281: #ifdef ENOENT ! 282: case ENOENT: return "no such file or directory"; ! 283: #endif ! 284: #ifdef ENOEXEC ! 285: case ENOEXEC: return "exec format error"; ! 286: #endif ! 287: #ifdef ENOLCK ! 288: case ENOLCK: return "no locks available"; ! 289: #endif ! 290: #ifdef ENOLINK ! 291: case ENOLINK: return "link has be severed"; ! 292: #endif ! 293: #ifdef ENOMEM ! 294: case ENOMEM: return "not enough memory"; ! 295: #endif ! 296: #ifdef ENOMSG ! 297: case ENOMSG: return "no message of desired type"; ! 298: #endif ! 299: #ifdef ENONET ! 300: case ENONET: return "machine is not on the network"; ! 301: #endif ! 302: #ifdef ENOPKG ! 303: case ENOPKG: return "package not installed"; ! 304: #endif ! 305: #ifdef ENOPROTOOPT ! 306: case ENOPROTOOPT: return "bad proocol option"; ! 307: #endif ! 308: #ifdef ENOSPC ! 309: case ENOSPC: return "no space left on device"; ! 310: #endif ! 311: #ifdef ENOSR ! 312: case ENOSR: return "out of stream resources"; ! 313: #endif ! 314: #ifdef ENOSTR ! 315: case ENOSTR: return "not a stream device"; ! 316: #endif ! 317: #ifdef ENOSYM ! 318: case ENOSYM: return "unresolved symbol name"; ! 319: #endif ! 320: #ifdef ENOSYS ! 321: case ENOSYS: return "function not implemented"; ! 322: #endif ! 323: #ifdef ENOTBLK ! 324: case ENOTBLK: return "block device required"; ! 325: #endif ! 326: #ifdef ENOTCONN ! 327: case ENOTCONN: return "socket is not connected"; ! 328: #endif ! 329: #ifdef ENOTDIR ! 330: case ENOTDIR: return "not a directory"; ! 331: #endif ! 332: #ifdef ENOTEMPTY ! 333: case ENOTEMPTY: return "directory not empty"; ! 334: #endif ! 335: #ifdef ENOTNAM ! 336: case ENOTNAM: return "not a name file"; ! 337: #endif ! 338: #ifdef ENOTSOCK ! 339: case ENOTSOCK: return "socket operation on non-socket"; ! 340: #endif ! 341: #ifdef ENOTTY ! 342: case ENOTTY: return "inappropriate device for ioctl"; ! 343: #endif ! 344: #ifdef ENOTUNIQ ! 345: case ENOTUNIQ: return "name not unique on network"; ! 346: #endif ! 347: #ifdef ENXIO ! 348: case ENXIO: return "no such device or address"; ! 349: #endif ! 350: #ifdef EOPNOTSUPP ! 351: case EOPNOTSUPP: return "operation not supported on socket"; ! 352: #endif ! 353: #ifdef EPERM ! 354: case EPERM: return "not owner"; ! 355: #endif ! 356: #ifdef EPFNOSUPPORT ! 357: case EPFNOSUPPORT: return "protocol family not supported"; ! 358: #endif ! 359: #ifdef EPIPE ! 360: case EPIPE: return "broken pipe"; ! 361: #endif ! 362: #ifdef EPROCLIM ! 363: case EPROCLIM: return "too many processes"; ! 364: #endif ! 365: #ifdef EPROCUNAVAIL ! 366: case EPROCUNAVAIL: return "bad procedure for program"; ! 367: #endif ! 368: #ifdef EPROGMISMATCH ! 369: case EPROGMISMATCH: return "program version wrong"; ! 370: #endif ! 371: #ifdef EPROGUNAVAIL ! 372: case EPROGUNAVAIL: return "RPC program not available"; ! 373: #endif ! 374: #ifdef EPROTO ! 375: case EPROTO: return "protocol error"; ! 376: #endif ! 377: #ifdef EPROTONOSUPPORT ! 378: case EPROTONOSUPPORT: return "protocol not suppored"; ! 379: #endif ! 380: #ifdef EPROTOTYPE ! 381: case EPROTOTYPE: return "protocol wrong type for socket"; ! 382: #endif ! 383: #ifdef ERANGE ! 384: case ERANGE: return "math result unrepresentable"; ! 385: #endif ! 386: #if defined(EREFUSED) && (!defined(ECONNREFUSED) || (EREFUSED != ECONNREFUSED)) ! 387: case EREFUSED: return "EREFUSED"; ! 388: #endif ! 389: #ifdef EREMCHG ! 390: case EREMCHG: return "remote address changed"; ! 391: #endif ! 392: #ifdef EREMDEV ! 393: case EREMDEV: return "remote device"; ! 394: #endif ! 395: #ifdef EREMOTE ! 396: case EREMOTE: return "pathname hit remote file system"; ! 397: #endif ! 398: #ifdef EREMOTEIO ! 399: case EREMOTEIO: return "remote i/o error"; ! 400: #endif ! 401: #ifdef EREMOTERELEASE ! 402: case EREMOTERELEASE: return "EREMOTERELEASE"; ! 403: #endif ! 404: #ifdef EROFS ! 405: case EROFS: return "read-only file system"; ! 406: #endif ! 407: #ifdef ERPCMISMATCH ! 408: case ERPCMISMATCH: return "RPC version is wrong"; ! 409: #endif ! 410: #ifdef ERREMOTE ! 411: case ERREMOTE: return "object is remote"; ! 412: #endif ! 413: #ifdef ESHUTDOWN ! 414: case ESHUTDOWN: return "can't send afer socket shutdown"; ! 415: #endif ! 416: #ifdef ESOCKTNOSUPPORT ! 417: case ESOCKTNOSUPPORT: return "socket type not supported"; ! 418: #endif ! 419: #ifdef ESPIPE ! 420: case ESPIPE: return "invalid seek"; ! 421: #endif ! 422: #ifdef ESRCH ! 423: case ESRCH: return "no such process"; ! 424: #endif ! 425: #ifdef ESRMNT ! 426: case ESRMNT: return "srmount error"; ! 427: #endif ! 428: #ifdef ESTALE ! 429: case ESTALE: return "stale remote file handle"; ! 430: #endif ! 431: #ifdef ESUCCESS ! 432: case ESUCCESS: return "Error 0"; ! 433: #endif ! 434: #ifdef ETIME ! 435: case ETIME: return "timer expired"; ! 436: #endif ! 437: #ifdef ETIMEDOUT ! 438: case ETIMEDOUT: return "connection timed out"; ! 439: #endif ! 440: #ifdef ETOOMANYREFS ! 441: case ETOOMANYREFS: return "too many references: can't splice"; ! 442: #endif ! 443: #ifdef ETXTBSY ! 444: case ETXTBSY: return "text file or pseudo-device busy"; ! 445: #endif ! 446: #ifdef EUCLEAN ! 447: case EUCLEAN: return "structure needs cleaning"; ! 448: #endif ! 449: #ifdef EUNATCH ! 450: case EUNATCH: return "protocol driver not attached"; ! 451: #endif ! 452: #ifdef EUSERS ! 453: case EUSERS: return "too many users"; ! 454: #endif ! 455: #ifdef EVERSION ! 456: case EVERSION: return "version mismatch"; ! 457: #endif ! 458: #if defined(EWOULDBLOCK) && (!defined(EAGAIN) || (EWOULDBLOCK != EAGAIN)) ! 459: case EWOULDBLOCK: return "operation would block"; ! 460: #endif ! 461: #ifdef EXDEV ! 462: case EXDEV: return "cross-domain link"; ! 463: #endif ! 464: #ifdef EXFULL ! 465: case EXFULL: return "message tables full"; ! 466: #endif ! 467: } ! 468: #endif /* ! TCL_SYS_ERRLIST */ ! 469: sprintf(msg, "unknown error (%d)", error); ! 470: return msg; ! 471: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.