|
|
1.1 ! root 1: /* ! 2: * strerror.c -- ! 3: * ! 4: * Source code for the "strerror" library routine. ! 5: * ! 6: * Copyright 1988 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 appear 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: /sprite/src/lib/c/string/RCS/strerror.c,v 1.5 89/03/22 16:06:57 rab Exp Locker: shirriff $ SPRITE (Berkeley)"; ! 18: #endif /* not lint */ ! 19: ! 20: #include <stdio.h> ! 21: #include <string.h> ! 22: ! 23: /* ! 24: * List of known errors: ! 25: */ ! 26: ! 27: char *sys_errlist[] = { ! 28: "no error (operation succeeded", /* 0 */ ! 29: "not owner", /* EPERM */ ! 30: "no such file or directory", /* ENOENT */ ! 31: "no such process", /* ESRCH */ ! 32: "interrupted system call", /* EINTR */ ! 33: "I/O error", /* EIO */ ! 34: "no such device or address", /* ENXIO */ ! 35: "argument list too long", /* E2BIG */ ! 36: "exec format error", /* ENOEXEC */ ! 37: "bad file number", /* EBADF */ ! 38: "no children", /* ECHILD */ ! 39: "no more processes", /* EAGAIN */ ! 40: "not enough memory", /* ENOMEM */ ! 41: "permission denied", /* EACCESS */ ! 42: "bad address in system call argument", /* EFAULT */ ! 43: "block device required", /* ENOTBLK */ ! 44: "mount device busy", /* EBUSY */ ! 45: "file already exists", /* EEXIST */ ! 46: "cross-domain link", /* EXDEV */ ! 47: "no such device", /* ENODEV */ ! 48: "not a directory", /* ENOTDIR */ ! 49: "illegal operation on a directory", /* EISDIR */ ! 50: "invalid argument", /* EINVAL */ ! 51: "file table overflow", /* ENFILE */ ! 52: "too many open files", /* EMFILE */ ! 53: "inappropriate device for ioctl", /* ENOTTY */ ! 54: "text file or pseudo-device busy", /* ETXTBSY */ ! 55: "file too large", /* EFBIG */ ! 56: "no space left in file system domain", /* ENOSPC */ ! 57: "illegal seek", /* ESPIPE */ ! 58: "read-only file system", /* EROFS */ ! 59: "too many links", /* EMLINK */ ! 60: "broken pipe", /* EPIPE */ ! 61: "math argument out of range", /* EDOM */ ! 62: "math result unrepresentable", /* ERANGE */ ! 63: "operation would block", /* EWOULDBLOCK */ ! 64: "operation now in progress", /* EINPROGRESS */ ! 65: "operation already in progress", /* EALREADY */ ! 66: "socket operation on non-socket", /* ENOTSOCK */ ! 67: "destination address required", /* EDESTADDRREQ */ ! 68: "message too long", /* EMSGSIZE */ ! 69: "protocol wrong type for socket", /* EPROTOTYPE */ ! 70: "bad proocol option", /* ENOPROTOOPT */ ! 71: "protocol not suppored", /* EPROTONOSUPPORT */ ! 72: "socket type not supported", /* ESOCKTNOSUPPORT */ ! 73: "operation not supported on socket", /* EOPNOTSUPP */ ! 74: "protocol family not supported", /* EPFNOSUPPORT */ ! 75: "address family not supported by protocol family", /* EAFNOSUPPORT */ ! 76: "address already in use", /* EADDRINUSE */ ! 77: "can't assign requested address", /* EADDRNOTAVAIL */ ! 78: "network is down", /* ENETDOWN */ ! 79: "network is unreachable", /* ENETUNREACH */ ! 80: "network dropped connection on reset", /* ENETRESET */ ! 81: "software caused connection abort", /* ECONNABORTED */ ! 82: "connection reset by peer", /* ECONNRESET */ ! 83: "no buffer space available", /* ENOBUFS */ ! 84: "socket is already connected", /* EISCONN */ ! 85: "socket is not connected", /* ENOTCONN */ ! 86: "can't send afer socket shutdown", /* ESHUTDOWN */ ! 87: "undefined error (59)", /* not used */ ! 88: "connection timed out", /* ETIMEDOUT */ ! 89: "connection refused", /* ECONNREFUSED */ ! 90: "too many levels of symbolic links", /* ELOOP */ ! 91: "file name too long", /* ENAMETOOLONG */ ! 92: "host is down", /* EHOSTDOWN */ ! 93: "host is unreachable", /* EHOSTUNREACH */ ! 94: "directory not empty", /* ENOTEMPTY */ ! 95: "too many processes", /* EPROCLIM */ ! 96: "too many users", /* EUSERS */ ! 97: "disk quota exceeded", /* EDQUOT */ ! 98: "stale remote file handle", /* ESTALE */ ! 99: "pathname hit remote file system", /* EREMOTE */ ! 100: "undefined error (72)", /* not used */ ! 101: "undefined error (73)", /* not used */ ! 102: "undefined error (74)", /* not used */ ! 103: "undefined error (75)", /* not used */ ! 104: "undefined error (76)", /* not used */ ! 105: "identifier removed", /* EIDRM */ ! 106: }; ! 107: int sys_nerr = sizeof(sys_errlist)/sizeof(char *); ! 108: ! 109: /* ! 110: *---------------------------------------------------------------------- ! 111: * ! 112: * strerror -- ! 113: * ! 114: * Map an integer error number into a printable string. ! 115: * ! 116: * Results: ! 117: * The return value is a pointer to a string describing ! 118: * error. The first character of string isn't capitalized. ! 119: * ! 120: * Side effects: ! 121: * Each call to this procedure may overwrite the value returned ! 122: * by the previous call. ! 123: * ! 124: *---------------------------------------------------------------------- ! 125: */ ! 126: ! 127: char * ! 128: strerror(error) ! 129: int error; /* Integer identifying error (must be ! 130: * one of the officially-defined Sprite ! 131: * errors, as defined in errno.h). */ ! 132: { ! 133: static char defaultMsg[50]; ! 134: ! 135: if ((error <= sys_nerr) && (error > 0)) { ! 136: return sys_errlist[error]; ! 137: } ! 138: (void) sprintf(defaultMsg, "unknown error (%d)", error); ! 139: return defaultMsg; ! 140: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.