Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2000-02-17 22:39:52 +0300
committerChristopher Faylor <me@cgf.cx>2000-02-17 22:39:52 +0300
commit8a0efa53e44919bcf5ccb1d3353618a82afdf8bc (patch)
tree68c3dbf3f2c6fd5d49777def9914d77b5cd4589d /newlib/libc/string/strerror.c
parent1fd5e000ace55b323124c7e556a7a864b972a5c4 (diff)
import newlib-2000-02-17 snapshot
Diffstat (limited to 'newlib/libc/string/strerror.c')
-rw-r--r--newlib/libc/string/strerror.c650
1 files changed, 650 insertions, 0 deletions
diff --git a/newlib/libc/string/strerror.c b/newlib/libc/string/strerror.c
new file mode 100644
index 000000000..78336595d
--- /dev/null
+++ b/newlib/libc/string/strerror.c
@@ -0,0 +1,650 @@
+/***
+**** CAUTION!!! KEEP DOC CONSISTENT---if you change text of a message
+**** here, change two places:
+**** 1) the leading doc section (alphabetized by macro)
+**** 2) the real text inside switch(errnum)
+***/
+
+/*
+FUNCTION
+ <<strerror>>---convert error number to string
+
+INDEX
+ strerror
+
+ANSI_SYNOPSIS
+ #include <string.h>
+ char *strerror(int <[errnum]>);
+
+TRAD_SYNOPSIS
+ #include <string.h>
+ char *strerror(<[errnum]>)
+ int <[errnum]>;
+
+DESCRIPTION
+<<strerror>> converts the error number <[errnum]> into a
+string. The value of <[errnum]> is usually a copy of <<errno>>.
+If <<errnum>> is not a known error number, the result points to an
+empty string.
+
+This implementation of <<strerror>> prints out the following strings
+for each of the values defined in `<<errno.h>>':
+
+o+
+o E2BIG
+Arg list too long
+
+o EACCES
+Permission denied
+
+o EADV
+Advertise error
+
+o EAGAIN
+No more processes
+
+o EBADF
+Bad file number
+
+o EBADMSG
+Bad message
+
+o EBUSY
+Device or resource busy
+
+o ECHILD
+No children
+
+o ECOMM
+Communication error
+
+o EDEADLK
+Deadlock
+
+o EEXIST
+File exists
+
+o EDOM
+Math argument
+
+o EFAULT
+Bad address
+
+o EFBIG
+File too large
+
+o EIDRM
+Identifier removed
+
+o EINTR
+Interrupted system call
+
+o EINVAL
+Invalid argument
+
+o EIO
+I/O error
+
+o EISDIR
+Is a directory
+
+o ELIBACC
+Cannot access a needed shared library
+
+o ELIBBAD
+Accessing a corrupted shared library
+
+o ELIBEXEC
+Cannot exec a shared library directly
+
+o ELIBMAX
+Attempting to link in more shared libraries than system limit
+
+o ELIBSCN
+<<.lib>> section in a.out corrupted
+
+o EMFILE
+Too many open files
+
+o EMLINK
+Too many links
+
+o EMULTIHOP
+Multihop attempted
+
+o ENAMETOOLONG
+File or path name too long
+
+o ENFILE
+Too many open files in system
+
+o ENODEV
+No such device
+
+o ENOENT
+No such file or directory
+
+o ENOEXEC
+Exec format error
+
+o ENOLCK
+No lock
+
+o ENOLINK
+Virtual circuit is gone
+
+o ENOMEM
+Not enough space
+
+o ENOMSG
+No message of desired type
+
+o ENONET
+Machine is not on the network
+
+o ENOPKG
+No package
+
+o ENOSPC
+No space left on device
+
+o ENOSR
+No stream resources
+
+o ENOSTR
+Not a stream
+
+o ENOSYS
+Function not implemented
+
+o ENOTBLK
+Block device required
+
+o ENOTDIR
+Not a directory
+
+o ENOTEMPTY
+Directory not empty
+
+o ENOTTY
+Not a character device
+
+o ENXIO
+No such device or address
+
+o EPERM
+Not owner
+
+o EPIPE
+Broken pipe
+
+o EPROTO
+Protocol error
+
+o ERANGE
+Result too large
+
+o EREMOTE
+Resource is remote
+
+o EROFS
+Read-only file system
+
+o ESPIPE
+Illegal seek
+
+o ESRCH
+No such process
+
+o ESRMNT
+Srmount error
+
+o ETIME
+Stream ioctl timeout
+
+o ETXTBSY
+Text file busy
+
+o EXDEV
+Cross-device link
+
+o-
+
+RETURNS
+This function returns a pointer to a string. Your application must
+not modify that string.
+
+PORTABILITY
+ANSI C requires <<strerror>>, but does not specify the strings used
+for each error number.
+
+Although this implementation of <<strerror>> is reentrant, ANSI C
+declares that subsequent calls to <<strerror>> may overwrite the
+result string; therefore portable code cannot depend on the reentrancy
+of this subroutine.
+
+This implementation of <<strerror>> provides for user-defined
+extensibility. <<errno.h>> defines <[__ELASTERROR]>, which can be
+used as a base for user-defined error values. If the user supplies a
+routine named <<_user_strerror>>, and <[errnum]> passed to
+<<strerror>> does not match any of the supported values,
+<<_user_strerror>> is called with <[errnum]> as its argument.
+
+<<_user_strerror>> takes one argument of type <[int]>, and returns a
+character pointer. If <[errnum]> is unknown to <<_user_strerror>>,
+<<_user_strerror>> returns <[NULL]>. The default <<_user_strerror>>
+returns <[NULL]> for all input values.
+
+<<strerror>> requires no supporting OS subroutines.
+
+QUICKREF
+ strerror ansi pure
+*/
+
+#include <errno.h>
+#include <string.h>
+
+char *
+_DEFUN (strerror, (errnum),
+ int errnum)
+{
+ char *error;
+ extern char *_user_strerror _PARAMS ((int));
+
+ switch (errnum)
+ {
+/* go32 defines EPERM as EACCES */
+#if defined (EPERM) && (!defined (EACCES) || (EPERM != EACCES))
+ case EPERM:
+ error = "Not owner";
+ break;
+#endif
+#ifdef ENOENT
+ case ENOENT:
+ error = "No such file or directory";
+ break;
+#endif
+#ifdef ESRCH
+ case ESRCH:
+ error = "No such process";
+ break;
+#endif
+#ifdef EINTR
+ case EINTR:
+ error = "Interrupted system call";
+ break;
+#endif
+#ifdef EIO
+ case EIO:
+ error = "I/O error";
+ break;
+#endif
+/* go32 defines ENXIO as ENODEV */
+#if defined (ENXIO) && (!defined (ENODEV) || (ENXIO != ENODEV))
+ case ENXIO:
+ error = "No such device or address";
+ break;
+#endif
+#ifdef E2BIG
+ case E2BIG:
+ error = "Arg list too long";
+ break;
+#endif
+#ifdef ENOEXEC
+ case ENOEXEC:
+ error = "Exec format error";
+ break;
+#endif
+#ifdef EBADF
+ case EBADF:
+ error = "Bad file number";
+ break;
+#endif
+#ifdef ECHILD
+ case ECHILD:
+ error = "No children";
+ break;
+#endif
+#ifdef EAGAIN
+ case EAGAIN:
+ error = "No more processes";
+ break;
+#endif
+#ifdef ENOMEM
+ case ENOMEM:
+ error = "Not enough space";
+ break;
+#endif
+#ifdef EACCES
+ case EACCES:
+ error = "Permission denied";
+ break;
+#endif
+#ifdef EFAULT
+ case EFAULT:
+ error = "Bad address";
+ break;
+#endif
+#ifdef ENOTBLK
+ case ENOTBLK:
+ error = "Block device required";
+ break;
+#endif
+#ifdef EBUSY
+ case EBUSY:
+ error = "Device or resource busy";
+ break;
+#endif
+#ifdef EEXIST
+ case EEXIST:
+ error = "File exists";
+ break;
+#endif
+#ifdef EXDEV
+ case EXDEV:
+ error = "Cross-device link";
+ break;
+#endif
+#ifdef ENODEV
+ case ENODEV:
+ error = "No such device";
+ break;
+#endif
+#ifdef ENOTDIR
+ case ENOTDIR:
+ error = "Not a directory";
+ break;
+#endif
+#ifdef EISDIR
+ case EISDIR:
+ error = "Is a directory";
+ break;
+#endif
+#ifdef EINVAL
+ case EINVAL:
+ error = "Invalid argument";
+ break;
+#endif
+#ifdef ENFILE
+ case ENFILE:
+ error = "Too many open files in system";
+ break;
+#endif
+#ifdef EMFILE
+ case EMFILE:
+ error = "Too many open files";
+ break;
+#endif
+#ifdef ENOTTY
+ case ENOTTY:
+ error = "Not a character device";
+ break;
+#endif
+#ifdef ETXTBSY
+ case ETXTBSY:
+ error = "Text file busy";
+ break;
+#endif
+#ifdef EFBIG
+ case EFBIG:
+ error = "File too large";
+ break;
+#endif
+#ifdef ENOSPC
+ case ENOSPC:
+ error = "No space left on device";
+ break;
+#endif
+#ifdef ESPIPE
+ case ESPIPE:
+ error = "Illegal seek";
+ break;
+#endif
+#ifdef EROFS
+ case EROFS:
+ error = "Read-only file system";
+ break;
+#endif
+#ifdef EMLINK
+ case EMLINK:
+ error = "Too many links";
+ break;
+#endif
+#ifdef EPIPE
+ case EPIPE:
+ error = "Broken pipe";
+ break;
+#endif
+#ifdef EDOM
+ case EDOM:
+ error = "Math argument";
+ break;
+#endif
+#ifdef ERANGE
+ case ERANGE:
+ error = "Result too large";
+ break;
+#endif
+#ifdef ENOMSG
+ case ENOMSG:
+ error = "No message of desired type";
+ break;
+#endif
+#ifdef EIDRM
+ case EIDRM:
+ error = "Identifier removed";
+ break;
+#endif
+#ifdef EDEADLK
+ case EDEADLK:
+ error = "Deadlock";
+ break;
+#endif
+#ifdef ENOLCK
+ case ENOLCK:
+ error = "No lock";
+ break;
+#endif
+#ifdef ENOSTR
+ case ENOSTR:
+ error = "Not a stream";
+ break;
+#endif
+#ifdef ETIME
+ case ETIME:
+ error = "Stream ioctl timeout";
+ break;
+#endif
+#ifdef ENOSR
+ case ENOSR:
+ error = "No stream resources";
+ break;
+#endif
+#ifdef ENONET
+ case ENONET:
+ error = "Machine is not on the network";
+ break;
+#endif
+#ifdef ENOPKG
+ case ENOPKG:
+ error = "No package";
+ break;
+#endif
+#ifdef EREMOTE
+ case EREMOTE:
+ error = "Resource is remote";
+ break;
+#endif
+#ifdef ENOLINK
+ case ENOLINK:
+ error = "Virtual circuit is gone";
+ break;
+#endif
+#ifdef EADV
+ case EADV:
+ error = "Advertise error";
+ break;
+#endif
+#ifdef ESRMNT
+ case ESRMNT:
+ error = "Srmount error";
+ break;
+#endif
+#ifdef ECOMM
+ case ECOMM:
+ error = "Communication error";
+ break;
+#endif
+#ifdef EPROTO
+ case EPROTO:
+ error = "Protocol error";
+ break;
+#endif
+#ifdef EMULTIHOP
+ case EMULTIHOP:
+ error = "Multihop attempted";
+ break;
+#endif
+#ifdef EBADMSG
+ case EBADMSG:
+ error = "Bad message";
+ break;
+#endif
+#ifdef ELIBACC
+ case ELIBACC:
+ error = "Cannot access a needed shared library";
+ break;
+#endif
+#ifdef ELIBBAD
+ case ELIBBAD:
+ error = "Accessing a corrupted shared library";
+ break;
+#endif
+#ifdef ELIBSCN
+ case ELIBSCN:
+ error = ".lib section in a.out corrupted";
+ break;
+#endif
+#ifdef ELIBMAX
+ case ELIBMAX:
+ error = "Attempting to link in more shared libraries than system limit";
+ break;
+#endif
+#ifdef ELIBEXEC
+ case ELIBEXEC:
+ error = "Cannot exec a shared library directly";
+ break;
+#endif
+#ifdef ENOSYS
+ case ENOSYS:
+ error = "Function not implemented";
+ break;
+#endif
+#ifdef ENMFILE
+ case ENMFILE:
+ error = "No more files";
+ break;
+#endif
+#ifdef ENOTEMPTY
+ case ENOTEMPTY:
+ error = "Directory not empty";
+ break;
+#endif
+#ifdef ENAMETOOLONG
+ case ENAMETOOLONG:
+ error = "File or path name too long";
+ break;
+#endif
+#ifdef ELOOP
+ case ELOOP:
+ error = "Too many symbolic links";
+ break;
+#endif
+#ifdef ENOBUFS
+ case ENOBUFS:
+ error = "No buffer space available";
+ break;
+#endif
+#ifdef EAFNOSUPPORT
+ case EAFNOSUPPORT:
+ error = "Address family not supported by protocol family";
+ break;
+#endif
+#ifdef EPROTOTYPE
+ case EPROTOTYPE:
+ error = "Protocol wrong type for socket";
+ break;
+#endif
+#ifdef ENOTSOCK
+ case ENOTSOCK:
+ error = "Socket operation on non-socket";
+ break;
+#endif
+#ifdef ENOPROTOOPT
+ case ENOPROTOOPT:
+ error = "Protocol not available";
+ break;
+#endif
+#ifdef ESHUTDOWN
+ case ESHUTDOWN:
+ error = "Can't send after socket shutdown";
+ break;
+#endif
+#ifdef ECONNREFUSED
+ case ECONNREFUSED:
+ error = "Connection refused";
+ break;
+#endif
+#ifdef EADDRINUSE
+ case EADDRINUSE:
+ error = "Address already in use";
+ break;
+#endif
+#ifdef ECONNABORTED
+ case ECONNABORTED:
+ error = "Software caused connection abort";
+ break;
+#endif
+#if (defined(EWOULDBLOCK) && (!defined (EAGAIN) || (EWOULDBLOCK != EAGAIN)))
+ case EWOULDBLOCK:
+ error = "Operation would block";
+ break;
+#endif
+#ifdef ENOTCONN
+ case ENOTCONN:
+ error = "Socket is not connected";
+ break;
+#endif
+#ifdef ESOCKTNOSUPPORT
+ case ESOCKTNOSUPPORT:
+ error = "Socket type not supported";
+ break;
+#endif
+#ifdef EISCONN
+ case EISCONN:
+ error = "Socket is already connected";
+ break;
+#endif
+#ifdef EOPNOTSUPP
+ case EOPNOTSUPP:
+ error = "Operation not supported on socket";
+ break;
+#endif
+#ifdef EMSGSIZE
+ case EMSGSIZE:
+ error = "Message too long";
+ break;
+#endif
+#ifdef ETIMEDOUT
+ case ETIMEDOUT:
+ error = "Connection timed out";
+ break;
+#endif
+ default:
+ if ((error = _user_strerror (errnum)) == 0)
+ error = "";
+ break;
+ }
+
+ return error;
+}