1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-29 11:41:21 +03:00

Remove __need macros from errno.h (__need_Emath, __need_error_t).

This is fairly complicated, not because the users of __need_Emath and
__need_error_t have complicated requirements, but because the core
changes had a lot of fallout.

__need_error_t exists for gnulib compatibility in argz.h and argp.h.
error_t itself is a Hurdism, an enum containing all the E-constants,
so you can do 'p (error_t) errno' in gdb and get a symbolic value.
argz.h and argp.h use it for function return values, and they want to
fall back to 'int' when that's not available.  There is no reason why
these nonstandard headers cannot just go ahead and include all of
errno.h; so we do that.

__need_Emath is defined only by .S files; what they _really_ need is
for errno.h to avoid declaring anything other than the E-constants
(e.g. 'extern int __errno_location(void);' is a syntax error in
assembly language). This is replaced with a check for __ASSEMBLER__ in
errno.h, plus a carefully documented requirement for bits/errno.h not
to define anything other than macros.  That in turn has the
consequence that bits/errno.h must not define errno - fortunately, all
live ports use the same definition of errno, so I've moved it to
errno.h.  The Hurd bits/errno.h must also take care not to define
error_t when __ASSEMBLER__ is defined, which involves repeating all of
the definitions twice, but it's a generated file so that's okay.

	* stdlib/errno.h: Remove __need_Emath and __need_error_t logic.
	Reorganize file.  Declare errno here.  When __ASSEMBLER__ is
	defined, don't declare anything other than the E-constants.

	* include/errno.h: Change conditional for exposing internal
	declarations to (not _ISOMAC and not __ASSEMBLER__).
	* bits/errno.h: Remove logic for __need_Emath.  Document
	requirements for a port-specific bits/errno.h.

	* sysdeps/unix/sysv/linux/bits/errno.h
	* sysdeps/unix/sysv/linux/alpha/bits/errno.h
	* sysdeps/unix/sysv/linux/hppa/bits/errno.h
	* sysdeps/unix/sysv/linux/mips/bits/errno.h
	* sysdeps/unix/sysv/linux/sparc/bits/errno.h:
	Add multiple-include guard and check against improper inclusion.
	Remove __need_Emath logic.  Don't declare errno here.  Ensure all
	constants are defined as simple integer literals.  Consistent
	formatting.
	* sysdeps/mach/hurd/errnos.awk: Likewise.  Only define error_t and
	enum __error_t_codes if __ASSEMBLER__ is not defined.
	* sysdeps/mach/hurd/bits/errno.h: Regenerate.

	* argp/argp.h, string/argz.h: Don't define __need_error_t before
	including errno.h.
	* sysdeps/i386/i686/fpu/multiarch/s_cosf-sse2.S
	* sysdeps/i386/i686/fpu/multiarch/s_sincosf-sse2.S
	* sysdeps/i386/i686/fpu/multiarch/s_sinf-sse2.S
	* sysdeps/x86_64/fpu/s_cosf.S
	* sysdeps/x86_64/fpu/s_sincosf.S
	* sysdeps/x86_64/fpu/s_sinf.S:
	Just include errno.h; don't define __need_Emath or include
	bits/errno.h directly.
This commit is contained in:
Zack Weinberg
2017-03-21 16:30:53 -04:00
parent 37f802f864
commit fd860eaaa8
20 changed files with 724 additions and 612 deletions

View File

@ -1,3 +1,38 @@
2017-06-14 Zack Weinberg <zackw@panix.com>
* stdlib/errno.h: Remove __need_Emath and __need_error_t logic.
Reorganize file. Declare errno here. When __ASSEMBLER__ is
defined, don't declare anything other than the E-constants.
* include/errno.h: Change conditional for exposing internal
declarations to (not _ISOMAC and not __ASSEMBLER__).
* bits/errno.h: Remove logic for __need_Emath. Document
requirements for a port-specific bits/errno.h.
* sysdeps/unix/sysv/linux/bits/errno.h
* sysdeps/unix/sysv/linux/alpha/bits/errno.h
* sysdeps/unix/sysv/linux/hppa/bits/errno.h
* sysdeps/unix/sysv/linux/mips/bits/errno.h
* sysdeps/unix/sysv/linux/sparc/bits/errno.h:
Add multiple-include guard and check against improper inclusion.
Remove __need_Emath logic. Don't declare errno here. Ensure all
constants are defined as simple integer literals. Consistent
formatting.
* sysdeps/mach/hurd/errnos.awk: Likewise. Only define error_t and
enum __error_t_codes if __ASSEMBLER__ is not defined.
* sysdeps/mach/hurd/bits/errno.h: Regenerate.
* argp/argp.h, string/argz.h: Don't define __need_error_t before
including errno.h.
* sysdeps/i386/i686/fpu/multiarch/s_cosf-sse2.S
* sysdeps/i386/i686/fpu/multiarch/s_sincosf-sse2.S
* sysdeps/i386/i686/fpu/multiarch/s_sinf-sse2.S
* sysdeps/x86_64/fpu/s_cosf.S
* sysdeps/x86_64/fpu/s_sincosf.S
* sysdeps/x86_64/fpu/s_sinf.S:
Just include errno.h; don't define __need_Emath or include
bits/errno.h directly.
2017-06-14 Zack Weinberg <zackw@panix.com> 2017-06-14 Zack Weinberg <zackw@panix.com>
* bits/uio_lim.h, sysdeps/unix/sysv/linux/bits/uio_lim.h * bits/uio_lim.h, sysdeps/unix/sysv/linux/bits/uio_lim.h

4
NEWS
View File

@ -11,6 +11,10 @@ Version 2.26
transliteration tables are all updated to Unicode 9.0.0, using transliteration tables are all updated to Unicode 9.0.0, using
generator scripts contributed by Mike FABIAN (Red Hat). generator scripts contributed by Mike FABIAN (Red Hat).
* errno.h is now safe to use from C-preprocessed assembly language on all
supported operating systems. In this context, it will only define the
Exxxx constants, as preprocessor macros expanding to integer literals.
* The rpcgen, librpcsvc and related headers will only be built and * The rpcgen, librpcsvc and related headers will only be built and
installed when glibc is configured with --enable-obsolete-rpc. installed when glibc is configured with --enable-obsolete-rpc.
This allows alternative RPC implementations, like TIRPC, to be used This allows alternative RPC implementations, like TIRPC, to be used

View File

@ -24,17 +24,17 @@
#include <ctype.h> #include <ctype.h>
#include <getopt.h> #include <getopt.h>
#include <limits.h> #include <limits.h>
#define __need_error_t
#include <errno.h> #include <errno.h>
#ifndef __error_t_defined
typedef int error_t;
# define __error_t_defined
#endif
__BEGIN_DECLS __BEGIN_DECLS
/* error_t may or may not be available from errno.h, depending on the
operating system. */
#ifndef __error_t_defined
# define __error_t_defined 1
typedef int error_t;
#endif
/* A description of a particular option. A pointer to an array of /* A description of a particular option. A pointer to an array of
these is passed in the OPTIONS field of an argp structure. Each option these is passed in the OPTIONS field of an argp structure. Each option
entry can correspond to one long option and/or one short option; more entry can correspond to one long option and/or one short option; more

View File

@ -1,4 +1,5 @@
/* Copyright (C) 1991-2017 Free Software Foundation, Inc. /* Error constants. Generic version.
Copyright (C) 1991-2017 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -15,20 +16,35 @@
License along with the GNU C Library; if not, see License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
/* This file defines the `errno' constants. */ /* This file defines the errno constants. */
#if !defined __Emath_defined && (defined _ERRNO_H || defined __need_Emath) #ifndef _BITS_ERRNO_H
#undef __need_Emath #define _BITS_ERRNO_H 1
#define __Emath_defined 1
# define EDOM XXX <--- fill in what is actually needed #if !defined _ERRNO_H
# define EILSEQ XXX <--- fill in what is actually needed # error "Never include <bits/errno.h> directly; use <errno.h> instead."
# define ERANGE XXX <--- fill in what is actually needed
#endif #endif
#ifdef _ERRNO_H #error "Generic bits/errno.h included -- port is incomplete."
# error "Define here all the missing error messages for the port. These"
# error "must match the numbers of the kernel." /* Authors of new ports of the GNU C Library must override this file
# define Exxxx XXX with their own bits/errno.h in an appropriate subdirectory of
... sysdeps/. Its function is to define all of the error constants
#endif from C2011 and POSIX.1-2008, with values appropriate to the
operating system, and any additional OS-specific error constants.
C2011 requires all error constants to be object-like macros that
expand to "integer constant expressions with type int, positive
values, and suitable for use in #if directives". Moreover, all of
their names must begin with a capital E, followed immediately by
either another capital letter, or a digit. It is OK to define
macros that are not error constants, but only in the implementation
namespace.
errno.h is sometimes included from assembly language. Therefore,
when __ASSEMBLER__ is defined, bits/errno.h may only define macros;
it may not make any other kind of C declaration or definition.
Also, the error constants should, if at all possible, expand to
simple decimal or hexadecimal numbers. */
#endif /* bits/errno.h. */

View File

@ -1,8 +1,6 @@
#ifndef _ERRNO_H #ifndef _ERRNO_H
#include <stdlib/errno.h> #include <stdlib/errno.h>
#if !defined _ISOMAC && !defined __ASSEMBLER__
#if defined _ERRNO_H && !defined _ISOMAC
# if IS_IN (rtld) # if IS_IN (rtld)
# include <dl-sysdep.h> # include <dl-sysdep.h>
@ -38,15 +36,12 @@ extern __thread int errno attribute_tls_model_ie;
# define __set_errno(val) (errno = (val)) # define __set_errno(val) (errno = (val))
# ifndef __ASSEMBLER__
extern int *__errno_location (void) __THROW __attribute_const__ extern int *__errno_location (void) __THROW __attribute_const__
# if RTLD_PRIVATE_ERRNO # if RTLD_PRIVATE_ERRNO
attribute_hidden attribute_hidden
# endif # endif
; ;
libc_hidden_proto (__errno_location) libc_hidden_proto (__errno_location)
# endif
#endif /* _ERRNO_H */
#endif /* !_ISOMAC && !__ASSEMBLER__ */
#endif /* !_ERRNO_H */ #endif /* !_ERRNO_H */

View File

@ -20,53 +20,41 @@
*/ */
#ifndef _ERRNO_H #ifndef _ERRNO_H
/* The includer defined __need_Emath if he wants only the definitions
of EDOM and ERANGE, and not everything else. */
#ifndef __need_Emath
#define _ERRNO_H 1 #define _ERRNO_H 1
#include <features.h> #include <features.h>
#endif
/* The system-specific definitions of the E* constants, as macros. */
#include <bits/errno.h>
/* When included from assembly language, this header only provides the
E* constants. */
#ifndef __ASSEMBLER__
__BEGIN_DECLS __BEGIN_DECLS
/* Get the error number constants from the system-specific file. /* The error code set by various library functions. */
This file will test __need_Emath and _ERRNO_H. */ extern int *__errno_location (void) __THROW __attribute_const__;
#include <bits/errno.h> # define errno (*__errno_location ())
#undef __need_Emath
#ifdef _ERRNO_H
/* Declare the `errno' variable, unless it's defined as a macro by
bits/errno.h. This is the case in GNU, where it is a per-thread
variable. This redeclaration using the macro still works, but it
will be a function declaration without a prototype and may trigger
a -Wstrict-prototypes warning. */
#ifndef errno
extern int errno;
#endif
# ifdef __USE_GNU # ifdef __USE_GNU
/* The full and simple forms of the name with which the program was /* The full and simple forms of the name with which the program was
invoked. These variables are set up automatically at startup based on invoked. These variables are set up automatically at startup based on
the value of argv[0]. */ the value of argv[0]. */
extern char *program_invocation_name, *program_invocation_short_name; extern char *program_invocation_name;
extern char *program_invocation_short_name;
/* bits/errno.h may have defined this type. If it didn't, provide a
fallback definition. */
# ifndef __error_t_defined
# define __error_t_defined 1
typedef int error_t;
# endif
# endif /* __USE_GNU */ # endif /* __USE_GNU */
#endif /* _ERRNO_H */
__END_DECLS __END_DECLS
#endif /* _ERRNO_H */ #endif /* !__ASSEMBLER__ */
#endif /* errno.h */
/* The Hurd <bits/errno.h> defines `error_t' as an enumerated type so
that printing `error_t' values in the debugger shows the names. We
might need this definition sometimes even if this file was included
before. */
#if defined __USE_GNU || defined __need_error_t
# ifndef __error_t_defined
typedef int error_t;
# define __error_t_defined 1
# endif
# undef __need_error_t
#endif

View File

@ -20,18 +20,18 @@
#define _ARGZ_H 1 #define _ARGZ_H 1
#include <features.h> #include <features.h>
#define __need_error_t
#include <errno.h> #include <errno.h>
#include <string.h> /* Need size_t, and strchr is called below. */ #include <string.h> /* Need size_t, and strchr is called below. */
__BEGIN_DECLS
/* error_t may or may not be available from errno.h, depending on the
operating system. */
#ifndef __error_t_defined #ifndef __error_t_defined
# define __error_t_defined 1
typedef int error_t; typedef int error_t;
#endif #endif
__BEGIN_DECLS
/* Make a '\0' separated arg vector from a unix argv vector, returning it in /* Make a '\0' separated arg vector from a unix argv vector, returning it in
ARGZ, and the total length in LEN. If a memory allocation error occurs, ARGZ, and the total length in LEN. If a memory allocation error occurs,
ENOMEM is returned, otherwise 0. The result can be destroyed using free. */ ENOMEM is returned, otherwise 0. The result can be destroyed using free. */

View File

@ -17,8 +17,7 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#define __need_Emath #include <errno.h>
#include <bits/errno.h>
/* Short algorithm description: /* Short algorithm description:
* *

View File

@ -17,8 +17,7 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#define __need_Emath #include <errno.h>
#include <bits/errno.h>
/* Short algorithm description: /* Short algorithm description:
* *

View File

@ -17,8 +17,7 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#define __need_Emath #include <errno.h>
#include <bits/errno.h>
/* Short algorithm description: /* Short algorithm description:
* *

View File

@ -1,227 +1,132 @@
/* This file generated by errnos.awk. */ /* This file generated by errnos.awk from
errno.texi
mach/message.h
mach/kern_return.h
mach/mig_errors.h
device/device_types.h
Do not edit this file; edit errnos.awk and regenerate it. */
/* The Hurd uses Mach error system 0x10, currently only subsystem 0. */ #ifndef _BITS_ERRNO_H
#ifndef _HURD_ERRNO #define _BITS_ERRNO_H 1
#define _HURD_ERRNO(n) ((0x10 << 26) | ((n) & 0x3fff))
#if !defined _ERRNO_H
# error "Never include <bits/errno.h> directly; use <errno.h> instead."
#endif #endif
#ifdef _ERRNO_H #ifndef __ASSEMBLER__
enum __error_t_codes enum __error_t_codes
{ {
/* The value zero always means success and it is perfectly fine for /* The value zero always means success and it is perfectly fine
code to use 0 explicitly (or implicitly, e.g. via Boolean coercion). for code to use 0 explicitly (or implicitly, e.g. via Boolean
Having an enum entry for zero both makes the debugger print the name coercion.) Having an enum entry for zero both makes the
for error_t-typed zero values, and prevents the compiler from debugger print the name for error_t-typed zero values, and
issuing warnings about 'case 0:' in a switch on an error_t-typed prevents the compiler from issuing warnings about 'case 0:'
value. */ in a switch on an error_t-typed value. */
ESUCCESS = 0, ESUCCESS = 0,
#undef EDOM /* The Hurd uses Mach error system 0x10, subsystem 0. */
#undef ERANGE EPERM = 0x40000001, /* Operation not permitted */
EPERM = _HURD_ERRNO (1), ENOENT = 0x40000002, /* No such file or directory */
#define EPERM _HURD_ERRNO (1) /* Operation not permitted */ ESRCH = 0x40000003, /* No such process */
ENOENT = _HURD_ERRNO (2), EINTR = 0x40000004, /* Interrupted system call */
#define ENOENT _HURD_ERRNO (2) /* No such file or directory */ EIO = 0x40000005, /* Input/output error */
ESRCH = _HURD_ERRNO (3), ENXIO = 0x40000006, /* No such device or address */
#define ESRCH _HURD_ERRNO (3) /* No such process */ E2BIG = 0x40000007, /* Argument list too long */
EINTR = _HURD_ERRNO (4), ENOEXEC = 0x40000008, /* Exec format error */
#define EINTR _HURD_ERRNO (4) /* Interrupted system call */ EBADF = 0x40000009, /* Bad file descriptor */
EIO = _HURD_ERRNO (5), ECHILD = 0x4000000a, /* No child processes */
#define EIO _HURD_ERRNO (5) /* Input/output error */ EDEADLK = 0x4000000b, /* Resource deadlock avoided */
ENXIO = _HURD_ERRNO (6), ENOMEM = 0x4000000c, /* Cannot allocate memory */
#define ENXIO _HURD_ERRNO (6) /* No such device or address */ EACCES = 0x4000000d, /* Permission denied */
E2BIG = _HURD_ERRNO (7), EFAULT = 0x4000000e, /* Bad address */
#define E2BIG _HURD_ERRNO (7) /* Argument list too long */ ENOTBLK = 0x4000000f, /* Block device required */
ENOEXEC = _HURD_ERRNO (8), EBUSY = 0x40000010, /* Device or resource busy */
#define ENOEXEC _HURD_ERRNO (8) /* Exec format error */ EEXIST = 0x40000011, /* File exists */
EBADF = _HURD_ERRNO (9), EXDEV = 0x40000012, /* Invalid cross-device link */
#define EBADF _HURD_ERRNO (9) /* Bad file descriptor */ ENODEV = 0x40000013, /* No such device */
ECHILD = _HURD_ERRNO (10), ENOTDIR = 0x40000014, /* Not a directory */
#define ECHILD _HURD_ERRNO (10)/* No child processes */ EISDIR = 0x40000015, /* Is a directory */
EDEADLK = _HURD_ERRNO (11), EINVAL = 0x40000016, /* Invalid argument */
#define EDEADLK _HURD_ERRNO (11)/* Resource deadlock avoided */ EMFILE = 0x40000018, /* Too many open files */
ENOMEM = _HURD_ERRNO (12), ENFILE = 0x40000017, /* Too many open files in system */
#define ENOMEM _HURD_ERRNO (12)/* Cannot allocate memory */ ENOTTY = 0x40000019, /* Inappropriate ioctl for device */
EACCES = _HURD_ERRNO (13), ETXTBSY = 0x4000001a, /* Text file busy */
#define EACCES _HURD_ERRNO (13)/* Permission denied */ EFBIG = 0x4000001b, /* File too large */
EFAULT = _HURD_ERRNO (14), ENOSPC = 0x4000001c, /* No space left on device */
#define EFAULT _HURD_ERRNO (14)/* Bad address */ ESPIPE = 0x4000001d, /* Illegal seek */
ENOTBLK = _HURD_ERRNO (15), EROFS = 0x4000001e, /* Read-only file system */
#define ENOTBLK _HURD_ERRNO (15)/* Block device required */ EMLINK = 0x4000001f, /* Too many links */
EBUSY = _HURD_ERRNO (16), EPIPE = 0x40000020, /* Broken pipe */
#define EBUSY _HURD_ERRNO (16)/* Device or resource busy */ EDOM = 0x40000021, /* Numerical argument out of domain */
EEXIST = _HURD_ERRNO (17), ERANGE = 0x40000022, /* Numerical result out of range */
#define EEXIST _HURD_ERRNO (17)/* File exists */ EAGAIN = 0x40000023, /* Resource temporarily unavailable */
EXDEV = _HURD_ERRNO (18), EINPROGRESS = 0x40000024, /* Operation now in progress */
#define EXDEV _HURD_ERRNO (18)/* Invalid cross-device link */ EALREADY = 0x40000025, /* Operation already in progress */
ENODEV = _HURD_ERRNO (19), ENOTSOCK = 0x40000026, /* Socket operation on non-socket */
#define ENODEV _HURD_ERRNO (19)/* No such device */ EMSGSIZE = 0x40000028, /* Message too long */
ENOTDIR = _HURD_ERRNO (20), EPROTOTYPE = 0x40000029, /* Protocol wrong type for socket */
#define ENOTDIR _HURD_ERRNO (20)/* Not a directory */ ENOPROTOOPT = 0x4000002a, /* Protocol not available */
EISDIR = _HURD_ERRNO (21), EPROTONOSUPPORT = 0x4000002b, /* Protocol not supported */
#define EISDIR _HURD_ERRNO (21)/* Is a directory */ ESOCKTNOSUPPORT = 0x4000002c, /* Socket type not supported */
EINVAL = _HURD_ERRNO (22), EOPNOTSUPP = 0x4000002d, /* Operation not supported */
#define EINVAL _HURD_ERRNO (22)/* Invalid argument */ EPFNOSUPPORT = 0x4000002e, /* Protocol family not supported */
EMFILE = _HURD_ERRNO (24), EAFNOSUPPORT = 0x4000002f, /* Address family not supported by protocol */
#define EMFILE _HURD_ERRNO (24)/* Too many open files */ EADDRINUSE = 0x40000030, /* Address already in use */
ENFILE = _HURD_ERRNO (23), EADDRNOTAVAIL = 0x40000031, /* Cannot assign requested address */
#define ENFILE _HURD_ERRNO (23)/* Too many open files in system */ ENETDOWN = 0x40000032, /* Network is down */
ENOTTY = _HURD_ERRNO (25), ENETUNREACH = 0x40000033, /* Network is unreachable */
#define ENOTTY _HURD_ERRNO (25)/* Inappropriate ioctl for device */ ENETRESET = 0x40000034, /* Network dropped connection on reset */
ETXTBSY = _HURD_ERRNO (26), ECONNABORTED = 0x40000035, /* Software caused connection abort */
#define ETXTBSY _HURD_ERRNO (26)/* Text file busy */ ECONNRESET = 0x40000036, /* Connection reset by peer */
EFBIG = _HURD_ERRNO (27), ENOBUFS = 0x40000037, /* No buffer space available */
#define EFBIG _HURD_ERRNO (27)/* File too large */ EISCONN = 0x40000038, /* Transport endpoint is already connected */
ENOSPC = _HURD_ERRNO (28), ENOTCONN = 0x40000039, /* Transport endpoint is not connected */
#define ENOSPC _HURD_ERRNO (28)/* No space left on device */ EDESTADDRREQ = 0x40000027, /* Destination address required */
ESPIPE = _HURD_ERRNO (29), ESHUTDOWN = 0x4000003a, /* Cannot send after transport endpoint shutdown */
#define ESPIPE _HURD_ERRNO (29)/* Illegal seek */ ETOOMANYREFS = 0x4000003b, /* Too many references: cannot splice */
EROFS = _HURD_ERRNO (30), ETIMEDOUT = 0x4000003c, /* Connection timed out */
#define EROFS _HURD_ERRNO (30)/* Read-only file system */ ECONNREFUSED = 0x4000003d, /* Connection refused */
EMLINK = _HURD_ERRNO (31), ELOOP = 0x4000003e, /* Too many levels of symbolic links */
#define EMLINK _HURD_ERRNO (31)/* Too many links */ ENAMETOOLONG = 0x4000003f, /* File name too long */
EPIPE = _HURD_ERRNO (32), EHOSTDOWN = 0x40000040, /* Host is down */
#define EPIPE _HURD_ERRNO (32)/* Broken pipe */ EHOSTUNREACH = 0x40000041, /* No route to host */
EDOM = _HURD_ERRNO (33), ENOTEMPTY = 0x40000042, /* Directory not empty */
#define EDOM _HURD_ERRNO (33)/* Numerical argument out of domain */ EPROCLIM = 0x40000043, /* Too many processes */
ERANGE = _HURD_ERRNO (34), EUSERS = 0x40000044, /* Too many users */
#define ERANGE _HURD_ERRNO (34)/* Numerical result out of range */ EDQUOT = 0x40000045, /* Disk quota exceeded */
EAGAIN = _HURD_ERRNO (35), ESTALE = 0x40000046, /* Stale file handle */
#define EAGAIN _HURD_ERRNO (35)/* Resource temporarily unavailable */ EREMOTE = 0x40000047, /* Object is remote */
#define EWOULDBLOCK EAGAIN /* Operation would block */ EBADRPC = 0x40000048, /* RPC struct is bad */
EINPROGRESS = _HURD_ERRNO (36), ERPCMISMATCH = 0x40000049, /* RPC version wrong */
#define EINPROGRESS _HURD_ERRNO (36)/* Operation now in progress */ EPROGUNAVAIL = 0x4000004a, /* RPC program not available */
EALREADY = _HURD_ERRNO (37), EPROGMISMATCH = 0x4000004b, /* RPC program version wrong */
#define EALREADY _HURD_ERRNO (37)/* Operation already in progress */ EPROCUNAVAIL = 0x4000004c, /* RPC bad procedure for program */
ENOTSOCK = _HURD_ERRNO (38), ENOLCK = 0x4000004d, /* No locks available */
#define ENOTSOCK _HURD_ERRNO (38)/* Socket operation on non-socket */ EFTYPE = 0x4000004f, /* Inappropriate file type or format */
EMSGSIZE = _HURD_ERRNO (40), EAUTH = 0x40000050, /* Authentication error */
#define EMSGSIZE _HURD_ERRNO (40)/* Message too long */ ENEEDAUTH = 0x40000051, /* Need authenticator */
EPROTOTYPE = _HURD_ERRNO (41), ENOSYS = 0x4000004e, /* Function not implemented */
#define EPROTOTYPE _HURD_ERRNO (41)/* Protocol wrong type for socket */ ENOTSUP = 0x40000076, /* Not supported */
ENOPROTOOPT = _HURD_ERRNO (42), EILSEQ = 0x4000006a, /* Invalid or incomplete multibyte or wide character */
#define ENOPROTOOPT _HURD_ERRNO (42)/* Protocol not available */ EBACKGROUND = 0x40000064, /* Inappropriate operation for background process */
EPROTONOSUPPORT = _HURD_ERRNO (43), EDIED = 0x40000065, /* Translator died */
#define EPROTONOSUPPORT _HURD_ERRNO (43)/* Protocol not supported */ ED = 0x40000066, /* ? */
ESOCKTNOSUPPORT = _HURD_ERRNO (44), EGREGIOUS = 0x40000067, /* You really blew it this time */
#define ESOCKTNOSUPPORT _HURD_ERRNO (44)/* Socket type not supported */ EIEIO = 0x40000068, /* Computer bought the farm */
EOPNOTSUPP = _HURD_ERRNO (45), EGRATUITOUS = 0x40000069, /* Gratuitous error */
#define EOPNOTSUPP _HURD_ERRNO (45)/* Operation not supported */ EBADMSG = 0x4000006b, /* Bad message */
EPFNOSUPPORT = _HURD_ERRNO (46), EIDRM = 0x4000006c, /* Identifier removed */
#define EPFNOSUPPORT _HURD_ERRNO (46)/* Protocol family not supported */ EMULTIHOP = 0x4000006d, /* Multihop attempted */
EAFNOSUPPORT = _HURD_ERRNO (47), ENODATA = 0x4000006e, /* No data available */
#define EAFNOSUPPORT _HURD_ERRNO (47)/* Address family not supported by protocol */ ENOLINK = 0x4000006f, /* Link has been severed */
EADDRINUSE = _HURD_ERRNO (48), ENOMSG = 0x40000070, /* No message of desired type */
#define EADDRINUSE _HURD_ERRNO (48)/* Address already in use */ ENOSR = 0x40000071, /* Out of streams resources */
EADDRNOTAVAIL = _HURD_ERRNO (49), ENOSTR = 0x40000072, /* Device not a stream */
#define EADDRNOTAVAIL _HURD_ERRNO (49)/* Cannot assign requested address */ EOVERFLOW = 0x40000073, /* Value too large for defined data type */
ENETDOWN = _HURD_ERRNO (50), EPROTO = 0x40000074, /* Protocol error */
#define ENETDOWN _HURD_ERRNO (50)/* Network is down */ ETIME = 0x40000075, /* Timer expired */
ENETUNREACH = _HURD_ERRNO (51), ECANCELED = 0x40000077, /* Operation canceled */
#define ENETUNREACH _HURD_ERRNO (51)/* Network is unreachable */
ENETRESET = _HURD_ERRNO (52),
#define ENETRESET _HURD_ERRNO (52)/* Network dropped connection on reset */
ECONNABORTED = _HURD_ERRNO (53),
#define ECONNABORTED _HURD_ERRNO (53)/* Software caused connection abort */
ECONNRESET = _HURD_ERRNO (54),
#define ECONNRESET _HURD_ERRNO (54)/* Connection reset by peer */
ENOBUFS = _HURD_ERRNO (55),
#define ENOBUFS _HURD_ERRNO (55)/* No buffer space available */
EISCONN = _HURD_ERRNO (56),
#define EISCONN _HURD_ERRNO (56)/* Transport endpoint is already connected */
ENOTCONN = _HURD_ERRNO (57),
#define ENOTCONN _HURD_ERRNO (57)/* Transport endpoint is not connected */
EDESTADDRREQ = _HURD_ERRNO (39),
#define EDESTADDRREQ _HURD_ERRNO (39)/* Destination address required */
ESHUTDOWN = _HURD_ERRNO (58),
#define ESHUTDOWN _HURD_ERRNO (58)/* Cannot send after transport endpoint shutdown */
ETOOMANYREFS = _HURD_ERRNO (59),
#define ETOOMANYREFS _HURD_ERRNO (59)/* Too many references: cannot splice */
ETIMEDOUT = _HURD_ERRNO (60),
#define ETIMEDOUT _HURD_ERRNO (60)/* Connection timed out */
ECONNREFUSED = _HURD_ERRNO (61),
#define ECONNREFUSED _HURD_ERRNO (61)/* Connection refused */
ELOOP = _HURD_ERRNO (62),
#define ELOOP _HURD_ERRNO (62)/* Too many levels of symbolic links */
ENAMETOOLONG = _HURD_ERRNO (63),
#define ENAMETOOLONG _HURD_ERRNO (63)/* File name too long */
EHOSTDOWN = _HURD_ERRNO (64),
#define EHOSTDOWN _HURD_ERRNO (64)/* Host is down */
EHOSTUNREACH = _HURD_ERRNO (65),
#define EHOSTUNREACH _HURD_ERRNO (65)/* No route to host */
ENOTEMPTY = _HURD_ERRNO (66),
#define ENOTEMPTY _HURD_ERRNO (66)/* Directory not empty */
EPROCLIM = _HURD_ERRNO (67),
#define EPROCLIM _HURD_ERRNO (67)/* Too many processes */
EUSERS = _HURD_ERRNO (68),
#define EUSERS _HURD_ERRNO (68)/* Too many users */
EDQUOT = _HURD_ERRNO (69),
#define EDQUOT _HURD_ERRNO (69)/* Disk quota exceeded */
ESTALE = _HURD_ERRNO (70),
#define ESTALE _HURD_ERRNO (70)/* Stale file handle */
EREMOTE = _HURD_ERRNO (71),
#define EREMOTE _HURD_ERRNO (71)/* Object is remote */
EBADRPC = _HURD_ERRNO (72),
#define EBADRPC _HURD_ERRNO (72)/* RPC struct is bad */
ERPCMISMATCH = _HURD_ERRNO (73),
#define ERPCMISMATCH _HURD_ERRNO (73)/* RPC version wrong */
EPROGUNAVAIL = _HURD_ERRNO (74),
#define EPROGUNAVAIL _HURD_ERRNO (74)/* RPC program not available */
EPROGMISMATCH = _HURD_ERRNO (75),
#define EPROGMISMATCH _HURD_ERRNO (75)/* RPC program version wrong */
EPROCUNAVAIL = _HURD_ERRNO (76),
#define EPROCUNAVAIL _HURD_ERRNO (76)/* RPC bad procedure for program */
ENOLCK = _HURD_ERRNO (77),
#define ENOLCK _HURD_ERRNO (77)/* No locks available */
EFTYPE = _HURD_ERRNO (79),
#define EFTYPE _HURD_ERRNO (79)/* Inappropriate file type or format */
EAUTH = _HURD_ERRNO (80),
#define EAUTH _HURD_ERRNO (80)/* Authentication error */
ENEEDAUTH = _HURD_ERRNO (81),
#define ENEEDAUTH _HURD_ERRNO (81)/* Need authenticator */
ENOSYS = _HURD_ERRNO (78),
#define ENOSYS _HURD_ERRNO (78)/* Function not implemented */
ENOTSUP = _HURD_ERRNO (118),
#define ENOTSUP _HURD_ERRNO (118)/* Not supported */
EILSEQ = _HURD_ERRNO (106),
#define EILSEQ _HURD_ERRNO (106)/* Invalid or incomplete multibyte or wide character */
EBACKGROUND = _HURD_ERRNO (100),
#define EBACKGROUND _HURD_ERRNO (100)/* Inappropriate operation for background process */
EDIED = _HURD_ERRNO (101),
#define EDIED _HURD_ERRNO (101)/* Translator died */
ED = _HURD_ERRNO (102),
#define ED _HURD_ERRNO (102)/* ? */
EGREGIOUS = _HURD_ERRNO (103),
#define EGREGIOUS _HURD_ERRNO (103)/* You really blew it this time */
EIEIO = _HURD_ERRNO (104),
#define EIEIO _HURD_ERRNO (104)/* Computer bought the farm */
EGRATUITOUS = _HURD_ERRNO (105),
#define EGRATUITOUS _HURD_ERRNO (105)/* Gratuitous error */
EBADMSG = _HURD_ERRNO (107),
#define EBADMSG _HURD_ERRNO (107)/* Bad message */
EIDRM = _HURD_ERRNO (108),
#define EIDRM _HURD_ERRNO (108)/* Identifier removed */
EMULTIHOP = _HURD_ERRNO (109),
#define EMULTIHOP _HURD_ERRNO (109)/* Multihop attempted */
ENODATA = _HURD_ERRNO (110),
#define ENODATA _HURD_ERRNO (110)/* No data available */
ENOLINK = _HURD_ERRNO (111),
#define ENOLINK _HURD_ERRNO (111)/* Link has been severed */
ENOMSG = _HURD_ERRNO (112),
#define ENOMSG _HURD_ERRNO (112)/* No message of desired type */
ENOSR = _HURD_ERRNO (113),
#define ENOSR _HURD_ERRNO (113)/* Out of streams resources */
ENOSTR = _HURD_ERRNO (114),
#define ENOSTR _HURD_ERRNO (114)/* Device not a stream */
EOVERFLOW = _HURD_ERRNO (115),
#define EOVERFLOW _HURD_ERRNO (115)/* Value too large for defined data type */
EPROTO = _HURD_ERRNO (116),
#define EPROTO _HURD_ERRNO (116)/* Protocol error */
ETIME = _HURD_ERRNO (117),
#define ETIME _HURD_ERRNO (117)/* Timer expired */
ECANCELED = _HURD_ERRNO (119),
#define ECANCELED _HURD_ERRNO (119)/* Operation canceled */
/* Errors from <mach/message.h>. */ /* Errors from <mach/message.h>. */
EMACH_SEND_IN_PROGRESS = 0x10000001, EMACH_SEND_IN_PROGRESS = 0x10000001,
@ -278,52 +183,236 @@ enum __error_t_codes
EKERN_MEMORY_PRESENT = 23, EKERN_MEMORY_PRESENT = 23,
EKERN_WRITE_PROTECTION_FAILURE = 24, EKERN_WRITE_PROTECTION_FAILURE = 24,
EKERN_TERMINATED = 26, EKERN_TERMINATED = 26,
EKERN_TIMEDOUT = 27,
EKERN_INTERRUPTED = 28,
/* Errors from <mach/mig_errors.h>. */ /* Errors from <mach/mig_errors.h>. */
EMIG_TYPE_ERROR = -300 /* client type check failure */, EMIG_TYPE_ERROR = -300, /* client type check failure */
EMIG_REPLY_MISMATCH = -301 /* wrong reply message ID */, EMIG_REPLY_MISMATCH = -301, /* wrong reply message ID */
EMIG_REMOTE_ERROR = -302 /* server detected error */, EMIG_REMOTE_ERROR = -302, /* server detected error */
EMIG_BAD_ID = -303 /* bad request message ID */, EMIG_BAD_ID = -303, /* bad request message ID */
EMIG_BAD_ARGUMENTS = -304 /* server type check failure */, EMIG_BAD_ARGUMENTS = -304, /* server type check failure */
EMIG_NO_REPLY = -305 /* no reply should be sent */, EMIG_NO_REPLY = -305, /* no reply should be sent */
EMIG_EXCEPTION = -306 /* server raised exception */, EMIG_EXCEPTION = -306, /* server raised exception */
EMIG_ARRAY_TOO_LARGE = -307 /* array not large enough */, EMIG_ARRAY_TOO_LARGE = -307, /* array not large enough */
EMIG_SERVER_DIED = -308 /* server died */, EMIG_SERVER_DIED = -308, /* server died */
EMIG_DESTROY_REQUEST = -309 /* destroy request with no reply */, EMIG_DESTROY_REQUEST = -309, /* destroy request with no reply */
/* Errors from <device/device_types.h>. */ /* Errors from <device/device_types.h>. */
ED_IO_ERROR = 2500 /* hardware IO error */, ED_IO_ERROR = 2500, /* hardware IO error */
ED_WOULD_BLOCK = 2501 /* would block, but D_NOWAIT set */, ED_WOULD_BLOCK = 2501, /* would block, but D_NOWAIT set */
ED_NO_SUCH_DEVICE = 2502 /* no such device */, ED_NO_SUCH_DEVICE = 2502, /* no such device */
ED_ALREADY_OPEN = 2503 /* exclusive-use device already open */, ED_ALREADY_OPEN = 2503, /* exclusive-use device already open */
ED_DEVICE_DOWN = 2504 /* device has been shut down */, ED_DEVICE_DOWN = 2504, /* device has been shut down */
ED_INVALID_OPERATION = 2505 /* bad operation for device */, ED_INVALID_OPERATION = 2505, /* bad operation for device */
ED_INVALID_RECNUM = 2506 /* invalid record (block) number */, ED_INVALID_RECNUM = 2506, /* invalid record (block) number */
ED_INVALID_SIZE = 2507 /* invalid IO size */, ED_INVALID_SIZE = 2507, /* invalid IO size */
ED_NO_MEMORY = 2508 /* memory allocation failure */, ED_NO_MEMORY = 2508, /* memory allocation failure */
ED_READ_ONLY = 2509 /* device cannot be written to */ ED_READ_ONLY = 2509, /* device cannot be written to */
/* Because the C standard requires that errno have type 'int',
this enumeration must be a signed type. */
__FORCE_ERROR_T_CODES_SIGNED = -1
}; };
/* User-visible type of error codes. It is ok to use 'int' or
'kern_return_t' for these, but with 'error_t' the debugger prints
symbolic values. */
# if !defined __error_t_defined && defined __USE_GNU
# define __error_t_defined 1
typedef enum __error_t_codes error_t;
# endif
#endif /* not __ASSEMBLER__ */
/* The C standard requires that all of the E-constants be
defined as macros. */
#define EPERM 0x40000001
#define ENOENT 0x40000002
#define ESRCH 0x40000003
#define EINTR 0x40000004
#define EIO 0x40000005
#define ENXIO 0x40000006
#define E2BIG 0x40000007
#define ENOEXEC 0x40000008
#define EBADF 0x40000009
#define ECHILD 0x4000000a
#define EDEADLK 0x4000000b
#define ENOMEM 0x4000000c
#define EACCES 0x4000000d
#define EFAULT 0x4000000e
#define ENOTBLK 0x4000000f
#define EBUSY 0x40000010
#define EEXIST 0x40000011
#define EXDEV 0x40000012
#define ENODEV 0x40000013
#define ENOTDIR 0x40000014
#define EISDIR 0x40000015
#define EINVAL 0x40000016
#define EMFILE 0x40000018
#define ENFILE 0x40000017
#define ENOTTY 0x40000019
#define ETXTBSY 0x4000001a
#define EFBIG 0x4000001b
#define ENOSPC 0x4000001c
#define ESPIPE 0x4000001d
#define EROFS 0x4000001e
#define EMLINK 0x4000001f
#define EPIPE 0x40000020
#define EDOM 0x40000021
#define ERANGE 0x40000022
#define EAGAIN 0x40000023
#define EWOULDBLOCK EAGAIN
#define EINPROGRESS 0x40000024
#define EALREADY 0x40000025
#define ENOTSOCK 0x40000026
#define EMSGSIZE 0x40000028
#define EPROTOTYPE 0x40000029
#define ENOPROTOOPT 0x4000002a
#define EPROTONOSUPPORT 0x4000002b
#define ESOCKTNOSUPPORT 0x4000002c
#define EOPNOTSUPP 0x4000002d
#define EPFNOSUPPORT 0x4000002e
#define EAFNOSUPPORT 0x4000002f
#define EADDRINUSE 0x40000030
#define EADDRNOTAVAIL 0x40000031
#define ENETDOWN 0x40000032
#define ENETUNREACH 0x40000033
#define ENETRESET 0x40000034
#define ECONNABORTED 0x40000035
#define ECONNRESET 0x40000036
#define ENOBUFS 0x40000037
#define EISCONN 0x40000038
#define ENOTCONN 0x40000039
#define EDESTADDRREQ 0x40000027
#define ESHUTDOWN 0x4000003a
#define ETOOMANYREFS 0x4000003b
#define ETIMEDOUT 0x4000003c
#define ECONNREFUSED 0x4000003d
#define ELOOP 0x4000003e
#define ENAMETOOLONG 0x4000003f
#define EHOSTDOWN 0x40000040
#define EHOSTUNREACH 0x40000041
#define ENOTEMPTY 0x40000042
#define EPROCLIM 0x40000043
#define EUSERS 0x40000044
#define EDQUOT 0x40000045
#define ESTALE 0x40000046
#define EREMOTE 0x40000047
#define EBADRPC 0x40000048
#define ERPCMISMATCH 0x40000049
#define EPROGUNAVAIL 0x4000004a
#define EPROGMISMATCH 0x4000004b
#define EPROCUNAVAIL 0x4000004c
#define ENOLCK 0x4000004d
#define EFTYPE 0x4000004f
#define EAUTH 0x40000050
#define ENEEDAUTH 0x40000051
#define ENOSYS 0x4000004e
#define ENOTSUP 0x40000076
#define EILSEQ 0x4000006a
#define EBACKGROUND 0x40000064
#define EDIED 0x40000065
#define ED 0x40000066
#define EGREGIOUS 0x40000067
#define EIEIO 0x40000068
#define EGRATUITOUS 0x40000069
#define EBADMSG 0x4000006b
#define EIDRM 0x4000006c
#define EMULTIHOP 0x4000006d
#define ENODATA 0x4000006e
#define ENOLINK 0x4000006f
#define ENOMSG 0x40000070
#define ENOSR 0x40000071
#define ENOSTR 0x40000072
#define EOVERFLOW 0x40000073
#define EPROTO 0x40000074
#define ETIME 0x40000075
#define ECANCELED 0x40000077
/* Errors from <mach/message.h>. */
#define EMACH_SEND_IN_PROGRESS 0x10000001
#define EMACH_SEND_INVALID_DATA 0x10000002
#define EMACH_SEND_INVALID_DEST 0x10000003
#define EMACH_SEND_TIMED_OUT 0x10000004
#define EMACH_SEND_WILL_NOTIFY 0x10000005
#define EMACH_SEND_NOTIFY_IN_PROGRESS 0x10000006
#define EMACH_SEND_INTERRUPTED 0x10000007
#define EMACH_SEND_MSG_TOO_SMALL 0x10000008
#define EMACH_SEND_INVALID_REPLY 0x10000009
#define EMACH_SEND_INVALID_RIGHT 0x1000000a
#define EMACH_SEND_INVALID_NOTIFY 0x1000000b
#define EMACH_SEND_INVALID_MEMORY 0x1000000c
#define EMACH_SEND_NO_BUFFER 0x1000000d
#define EMACH_SEND_NO_NOTIFY 0x1000000e
#define EMACH_SEND_INVALID_TYPE 0x1000000f
#define EMACH_SEND_INVALID_HEADER 0x10000010
#define EMACH_RCV_IN_PROGRESS 0x10004001
#define EMACH_RCV_INVALID_NAME 0x10004002
#define EMACH_RCV_TIMED_OUT 0x10004003
#define EMACH_RCV_TOO_LARGE 0x10004004
#define EMACH_RCV_INTERRUPTED 0x10004005
#define EMACH_RCV_PORT_CHANGED 0x10004006
#define EMACH_RCV_INVALID_NOTIFY 0x10004007
#define EMACH_RCV_INVALID_DATA 0x10004008
#define EMACH_RCV_PORT_DIED 0x10004009
#define EMACH_RCV_IN_SET 0x1000400a
#define EMACH_RCV_HEADER_ERROR 0x1000400b
#define EMACH_RCV_BODY_ERROR 0x1000400c
/* Errors from <mach/kern_return.h>. */
#define EKERN_INVALID_ADDRESS 1
#define EKERN_PROTECTION_FAILURE 2
#define EKERN_NO_SPACE 3
#define EKERN_INVALID_ARGUMENT 4
#define EKERN_FAILURE 5
#define EKERN_RESOURCE_SHORTAGE 6
#define EKERN_NOT_RECEIVER 7
#define EKERN_NO_ACCESS 8
#define EKERN_MEMORY_FAILURE 9
#define EKERN_MEMORY_ERROR 10
#define EKERN_NOT_IN_SET 12
#define EKERN_NAME_EXISTS 13
#define EKERN_ABORTED 14
#define EKERN_INVALID_NAME 15
#define EKERN_INVALID_TASK 16
#define EKERN_INVALID_RIGHT 17
#define EKERN_INVALID_VALUE 18
#define EKERN_UREFS_OVERFLOW 19
#define EKERN_INVALID_CAPABILITY 20
#define EKERN_RIGHT_EXISTS 21
#define EKERN_INVALID_HOST 22
#define EKERN_MEMORY_PRESENT 23
#define EKERN_WRITE_PROTECTION_FAILURE 24
#define EKERN_TERMINATED 26
#define EKERN_TIMEDOUT 27
#define EKERN_INTERRUPTED 28
/* Errors from <mach/mig_errors.h>. */
#define EMIG_TYPE_ERROR -300
#define EMIG_REPLY_MISMATCH -301
#define EMIG_REMOTE_ERROR -302
#define EMIG_BAD_ID -303
#define EMIG_BAD_ARGUMENTS -304
#define EMIG_NO_REPLY -305
#define EMIG_EXCEPTION -306
#define EMIG_ARRAY_TOO_LARGE -307
#define EMIG_SERVER_DIED -308
#define EMIG_DESTROY_REQUEST -309
/* Errors from <device/device_types.h>. */
#define ED_IO_ERROR 2500
#define ED_WOULD_BLOCK 2501
#define ED_NO_SUCH_DEVICE 2502
#define ED_ALREADY_OPEN 2503
#define ED_DEVICE_DOWN 2504
#define ED_INVALID_OPERATION 2505
#define ED_INVALID_RECNUM 2506
#define ED_INVALID_SIZE 2507
#define ED_NO_MEMORY 2508
#define ED_READ_ONLY 2509
#define _HURD_ERRNOS 120 #define _HURD_ERRNOS 120
/* User-visible type of error codes. It is ok to use `int' or #endif /* bits/errno.h. */
`kern_return_t' for these, but with `error_t' the debugger prints
symbolic values. */
#ifdef __USE_GNU
typedef enum __error_t_codes error_t;
#define __error_t_defined 1
#endif
/* Return the current thread's location for `errno'.
The syntax of this function allows redeclarations like `int errno'. */
extern int *__errno_location (void) __THROW __attribute__ ((__const__));
#define errno (*__errno_location ())
#endif /* <errno.h> included. */
#if !defined (_ERRNO_H) && defined (__need_Emath)
#define EDOM _HURD_ERRNO (33)/* Numerical argument out of domain */
#define ERANGE _HURD_ERRNO (34)/* Numerical result out of range */
#endif /* <errno.h> not included and need math error codes. */

View File

@ -19,71 +19,74 @@
# @errno{ENOSYS, 123, Function not implemented} # @errno{ENOSYS, 123, Function not implemented}
BEGIN { BEGIN {
print "/* This file generated by errnos.awk. */"; print "/* This file generated by errnos.awk from";
for (i = 1; i < ARGC; i++)
{
arg = ARGV[i];
sub(/.*(manual|include)\//, "", arg)
print " " arg;
}
print " Do not edit this file; edit errnos.awk and regenerate it. */";
print ""; print "";
print "/* The Hurd uses Mach error system 0x10, currently only subsystem 0. */"; print "#ifndef _BITS_ERRNO_H";
print "#ifndef _HURD_ERRNO"; print "#define _BITS_ERRNO_H 1";
print "#define _HURD_ERRNO(n)\t((0x10 << 26) | ((n) & 0x3fff))"; print "";
print "#if !defined _ERRNO_H";
print "# error \"Never include <bits/errno.h> directly; use <errno.h> instead.\"";
print "#endif"; print "#endif";
print "";
print "#ifdef _ERRNO_H\n";
print "enum __error_t_codes\n{";
print "\t/* The value zero always means success and it is perfectly fine for";
print "\t code to use 0 explicitly (or implicitly, e.g. via Boolean coercion).";
print "\t Having an enum entry for zero both makes the debugger print the name";
print "\t for error_t-typed zero values, and prevents the compiler from";
print "\t issuing warnings about 'case 0:' in a switch on an error_t-typed";
print "\t value. */";
print "\tESUCCESS = 0,"
print "";
maxerrno = 0; maxerrno = 0;
maxerrlen = 0;
in_mach_errors = ""; in_mach_errors = "";
in_math = 0; seq = 0;
edom = erange = "";
print "#undef EDOM\n#undef ERANGE";
lno = 0;
} }
/^@errno\{/ \ /^@errno\{/ \
{ {
etext = "";
for (i = 3; i <= NF; ++i)
etext = etext " " $i;
etext = substr(etext, 1, length(etext)-1)
e = substr($1, 8, length($1)-8) e = substr($1, 8, length($1)-8)
if (length(e) > maxerrlen)
maxerrlen = length(e);
if (e == "EWOULDBLOCK") if (e == "EWOULDBLOCK")
{ {
lines[lno++]="#define EWOULDBLOCK EAGAIN /* Operation would block */"; econsts[seq] = e;
errnos[seq] = "EAGAIN";
seq++;
next; next;
} }
errno = substr($2, 1, length($2)-1) + 0 errno = substr($2, 1, length($2)-1) + 0;
if (errno == 0) if (errno == 0)
next; next;
if (errno > maxerrno) maxerrno = errno; if (errno > 0x3ffff)
x = sprintf ("%-40s/*%s */", sprintf ("%-24s%s", "#define\t" e, {
"_HURD_ERRNO (" errno ")"), printf("%s:%d: errno value %d too large for the Hurd\n",
etext); FILENAME, NR, errno) >> "/dev/stderr";
if (e == "EDOM") exit 1;
edom = x; }
else if (e == "ERANGE") if (errno > maxerrno)
erange = x; maxerrno = errno;
comma[lno] = 1;
lines[lno++] = sprintf("\t%-16s= _HURD_ERRNO (%d)", e, errno); etext = "";
lines[lno++] = x; for (i = 3; i <= NF; ++i)
etext = etext " " $i;
etext = substr(etext, 2, length(etext)-2);
econsts[seq] = e;
errnos[seq] = sprintf("0x%08x", 0x40000000 + errno);
etexts[seq] = etext;
seq++;
next; next;
} }
NF == 3 && $1 == "#define" && $2 == "MACH_SEND_IN_PROGRESS" \ NF == 3 && $1 == "#define" && $2 == "MACH_SEND_IN_PROGRESS" \
{ {
in_mach_errors = FILENAME; in_mach_errors = FILENAME;
lines[lno++] = "\n\t/* Errors from <mach/message.h>. */"; annot[seq++] = "\n/* Errors from <mach/message.h>. */";
} }
NF == 3 && $1 == "#define" && $2 == "KERN_SUCCESS" \ NF == 3 && $1 == "#define" && $2 == "KERN_SUCCESS" \
{ {
in_mach_errors = FILENAME; in_mach_errors = FILENAME;
lines[lno++] = "\n\t/* Errors from <mach/kern_return.h>. */"; annot[seq++] = "\n/* Errors from <mach/kern_return.h>. */";
next; next;
} }
@ -92,16 +95,24 @@ in_mach_errors != "" && $2 == "MACH_IPC_COMPAT" \
in_mach_errors = ""; in_mach_errors = "";
} }
# FIXME: mach/message.h and mach/kern_return.h do include error
# descriptions which we could slurp, but some of them are very long,
# we would need to word-wrap them.
in_mach_errors == FILENAME && NF == 3 && $1 == "#define" \ in_mach_errors == FILENAME && NF == 3 && $1 == "#define" \
{ {
comma[lno] = 1; e = "E" $2;
lines[lno++] = sprintf("\t%-32s= %s", "E" $2, $3); if (length(e) > maxerrlen)
maxerrlen = length(e);
econsts[seq] = e;
errnos[seq] = $3;
etexts[seq] = "";
seq++;
} }
$1 == "#define" && $2 == "_MACH_MIG_ERRORS_H_" \ $1 == "#define" && $2 == "_MACH_MIG_ERRORS_H_" \
{ {
in_mig_errors = 1; in_mig_errors = 1;
lines[lno++] = "\n\t/* Errors from <mach/mig_errors.h>. */"; annot[seq++] = "\n/* Errors from <mach/mig_errors.h>. */";
next; next;
} }
in_mig_errors && $1 == "#endif" && $3 == "_MACH_MIG_ERRORS_H_" \ in_mig_errors && $1 == "#endif" && $3 == "_MACH_MIG_ERRORS_H_" \
@ -112,17 +123,23 @@ in_mig_errors && $1 == "#endif" && $3 == "_MACH_MIG_ERRORS_H_" \
(in_mig_errors && $1 == "#define" && $3 <= -300) || \ (in_mig_errors && $1 == "#define" && $3 <= -300) || \
(in_device_errors && $1 == "#define" && /D_/ && NF > 3) \ (in_device_errors && $1 == "#define" && /D_/ && NF > 3) \
{ {
comment = ""; etext = "";
for (i = 4; i <= NF; ++i) for (i = 5; i < NF; ++i)
comment = comment " " $i; etext = etext " " $i;
comma[lno] = 1;
lines[lno++] = sprintf("%-32s", sprintf ("\t%-24s= %s", "E" $2, $3)) comment; e = "E" $2;
if (length(e) > maxerrlen)
maxerrlen = length(e);
econsts[seq] = e;
errnos[seq] = $3;
etexts[seq] = substr(etext, 2, length(etext)-1);
seq++;
} }
$1 == "#define" && $2 == "D_SUCCESS" \ $1 == "#define" && $2 == "D_SUCCESS" \
{ {
in_device_errors = 1; in_device_errors = 1;
lines[lno++] = "\n\t/* Errors from <device/device_types.h>. */"; annot[seq++] = "\n/* Errors from <device/device_types.h>. */";
next; next;
} }
in_device_errors && $1 == "#endif" \ in_device_errors && $1 == "#endif" \
@ -130,36 +147,73 @@ in_device_errors && $1 == "#endif" \
in_device_errors = 0; in_device_errors = 0;
} }
function print_errno_enum(maxseq)
{
print "";
print "#ifndef __ASSEMBLER__";
print "";
print "enum __error_t_codes";
print "{";
print " /* The value zero always means success and it is perfectly fine";
print " for code to use 0 explicitly (or implicitly, e.g. via Boolean";
print " coercion.) Having an enum entry for zero both makes the";
print " debugger print the name for error_t-typed zero values, and";
print " prevents the compiler from issuing warnings about 'case 0:'";
print " in a switch on an error_t-typed value. */";
printf(" %-*s = 0,\n", maxerrlen, "ESUCCESS");
print "";
print " /* The Hurd uses Mach error system 0x10, subsystem 0. */";
for (i = 0; i < maxseq; i++)
{
if (i in annot)
print annot[i];
else if (i in etexts && etexts[i] != "")
printf(" %-*s = %s,\t/* %s */\n",
maxerrlen, econsts[i], errnos[i], etexts[i]);
else if (errnos[i] != "EAGAIN")
printf(" %-*s = %s,\n", maxerrlen, econsts[i], errnos[i]);
}
print "";
print " /* Because the C standard requires that errno have type 'int',"
print " this enumeration must be a signed type. */";
print " __FORCE_ERROR_T_CODES_SIGNED = -1";
print "};";
print "";
print "/* User-visible type of error codes. It is ok to use 'int' or";
print " 'kern_return_t' for these, but with 'error_t' the debugger prints";
print " symbolic values. */";
print "# if !defined __error_t_defined && defined __USE_GNU";
print "# define __error_t_defined 1";
print "typedef enum __error_t_codes error_t;"
print "# endif";
print "";
print "#endif /* not __ASSEMBLER__ */";
}
function print_errno_defines(maxseq)
{
print "";
print "/* The C standard requires that all of the E-constants be"
print " defined as macros. */"
print "";
for (i = 0; i < maxseq; i++)
{
if (i in annot)
print annot[i];
else
printf("#define %-*s %s\n", maxerrlen, econsts[i], errnos[i]);
}
print "";
printf("#define _HURD_ERRNOS %d\n", maxerrno+1);
}
END \ END \
{ {
for (i = 0; i < lno - 1; ++i) print_errno_enum(seq);
printf "%s%s\n", lines[i], (comma[i] ? "," : ""); print_errno_defines(seq);
print lines[i];
print ""; print "";
print "};"; print "#endif /* bits/errno.h. */";
print "";
printf "#define\t_HURD_ERRNOS\t%d\n", maxerrno+1;
print "";
print "\
/* User-visible type of error codes. It is ok to use `int' or\n\
`kern_return_t' for these, but with `error_t' the debugger prints\n\
symbolic values. */";
print "#ifdef __USE_GNU";
print "typedef enum __error_t_codes error_t;"
print "#define __error_t_defined\t1"
print "#endif";
print "";
print "\
/* Return the current thread's location for `errno'.\n\
The syntax of this function allows redeclarations like `int errno'. */\n\
extern int *__errno_location (void) __THROW __attribute__ ((__const__));\n\
\n\
#define errno (*__errno_location ())\n\
";
print "#endif /* <errno.h> included. */";
print "";
print "#if !defined (_ERRNO_H) && defined (__need_Emath)";
print edom; print erange;
print "#endif /* <errno.h> not included and need math error codes. */";
} }

View File

@ -16,23 +16,29 @@
License along with the GNU C Library. If not, see License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#ifdef _ERRNO_H #ifndef _BITS_ERRNO_H
#define _BITS_ERRNO_H 1
#if !defined _ERRNO_H
# error "Never include <bits/errno.h> directly; use <errno.h> instead."
#endif
# undef EDOM
# undef EILSEQ
# undef ERANGE
# include <linux/errno.h> # include <linux/errno.h>
/* Linux has no ENOTSUP error code. */ /* Older Linux headers do not define these constants. */
# ifndef ENOTSUP
# define ENOTSUP EOPNOTSUPP # define ENOTSUP EOPNOTSUPP
# endif
# ifndef ECANCELED # ifndef ECANCELED
# define ECANCELED 131 # define ECANCELED 131
# endif # endif
/* Support for error codes to support robust mutexes was added later, too. */
# ifndef EOWNERDEAD # ifndef EOWNERDEAD
# define EOWNERDEAD 136 # define EOWNERDEAD 136
# endif
# ifndef ENOTRECOVERABLE
# define ENOTRECOVERABLE 137 # define ENOTRECOVERABLE 137
# endif # endif
@ -44,22 +50,4 @@
# define EHWPOISON 139 # define EHWPOISON 139
# endif # endif
# ifndef __ASSEMBLER__ #endif /* bits/errno.h. */
/* Function to get address of global `errno' variable. */
extern int *__errno_location (void) __THROW __attribute__ ((__const__));
# if !defined _LIBC || defined _LIBC_REENTRANT
/* When using threads, errno is a per-thread value. */
# define errno (*__errno_location ())
# endif
# endif /* !__ASSEMBLER__ */
#endif /* _ERRNO_H */
#if !defined _ERRNO_H && defined __need_Emath
/* This is ugly but the kernel header is not clean enough. We must
define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is
defined. */
# define EDOM 33 /* Math argument out of domain of function. */
# define EILSEQ 116 /* Illegal byte sequence. */
# define ERANGE 34 /* Math result not representable. */
#endif /* !_ERRNO_H && __need_Emath */

View File

@ -16,24 +16,29 @@
License along with the GNU C Library; if not, see License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#ifdef _ERRNO_H #ifndef _BITS_ERRNO_H
#define _BITS_ERRNO_H 1
#if !defined _ERRNO_H
# error "Never include <bits/errno.h> directly; use <errno.h> instead."
#endif
# undef EDOM
# undef EILSEQ
# undef ERANGE
# include <linux/errno.h> # include <linux/errno.h>
/* Linux has no ENOTSUP error code. */ /* Older Linux headers do not define these constants. */
# ifndef ENOTSUP
# define ENOTSUP EOPNOTSUPP # define ENOTSUP EOPNOTSUPP
# endif
/* Older Linux versions also had no ECANCELED error code. */
# ifndef ECANCELED # ifndef ECANCELED
# define ECANCELED 125 # define ECANCELED 125
# endif # endif
/* Support for error codes to support robust mutexes was added later, too. */
# ifndef EOWNERDEAD # ifndef EOWNERDEAD
# define EOWNERDEAD 130 # define EOWNERDEAD 130
# endif
#ifndef ENOTRECOVERABLE
# define ENOTRECOVERABLE 131 # define ENOTRECOVERABLE 131
# endif # endif
@ -45,22 +50,4 @@
# define EHWPOISON 133 # define EHWPOISON 133
# endif # endif
# ifndef __ASSEMBLER__ #endif /* bits/errno.h. */
/* Function to get address of global `errno' variable. */
extern int *__errno_location (void) __THROW __attribute__ ((__const__));
# if !defined _LIBC || defined _LIBC_REENTRANT
/* When using threads, errno is a per-thread value. */
# define errno (*__errno_location ())
# endif
# endif /* !__ASSEMBLER__ */
#endif /* _ERRNO_H */
#if !defined _ERRNO_H && defined __need_Emath
/* This is ugly but the kernel header is not clean enough. We must
define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is
defined. */
# define EDOM 33 /* Math argument out of domain of function. */
# define EILSEQ 84 /* Illegal byte sequence. */
# define ERANGE 34 /* Math result not representable. */
#endif /* !_ERRNO_H && __need_Emath */

View File

@ -16,17 +16,22 @@
License along with the GNU C Library. If not, see License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#ifdef _ERRNO_H #ifndef _BITS_ERRNO_H
#define _BITS_ERRNO_H 1
#if !defined _ERRNO_H
# error "Never include <bits/errno.h> directly; use <errno.h> instead."
#endif
# undef EDOM
# undef EILSEQ
# undef ERANGE
# include <linux/errno.h> # include <linux/errno.h>
/* Linux also has no ECANCELED error code. Since it is not used here /* Older Linux headers do not define these constants. */
we define it to an invalid value. */ # ifndef ENOTSUP
# define ENOTSUP EOPNOTSUPP
# endif
# ifndef ECANCELED # ifndef ECANCELED
# define ECANCELED ECANCELLED # define ECANCELED 253
# endif # endif
# ifndef EOWNERDEAD # ifndef EOWNERDEAD
@ -45,22 +50,4 @@
# define EHWPOISON 257 # define EHWPOISON 257
# endif # endif
# ifndef __ASSEMBLER__ #endif /* bits/errno.h. */
/* Function to get address of global `errno' variable. */
extern int *__errno_location (void) __THROW __attribute__ ((__const__));
# if !defined _LIBC || defined _LIBC_REENTRANT
/* When using threads, errno is a per-thread value. */
# define errno (*__errno_location ())
# endif
# endif /* !__ASSEMBLER__ */
#endif /* _ERRNO_H */
#if !defined _ERRNO_H && defined __need_Emath
/* This is ugly but the kernel header is not clean enough. We must
define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is
defined. */
# define EDOM 33 /* Math argument out of domain of function. */
# define EILSEQ 47 /* Illegal byte sequence. */
# define ERANGE 34 /* Math result not representable. */
#endif /* !_ERRNO_H && __need_Emath */

View File

@ -16,23 +16,28 @@
License along with the GNU C Library. If not, see License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#ifdef _ERRNO_H #ifndef _BITS_ERRNO_H
#if !defined _ERRNO_H
# error "Never include <bits/errno.h> directly; use <errno.h> instead."
#endif
# undef EDOM
# undef EILSEQ
# undef ERANGE
# include <linux/errno.h> # include <linux/errno.h>
/* Linux has no ENOTSUP error code. */ /* Older Linux headers do not define these constants. */
# ifndef ENOTSUP
# define ENOTSUP EOPNOTSUPP # define ENOTSUP EOPNOTSUPP
# endif
# ifndef ECANCELED # ifndef ECANCELED
# define ECANCELED 158 # define ECANCELED 158
# endif # endif
/* Support for error codes to support robust mutexes was added later, too. */
# ifndef EOWNERDEAD # ifndef EOWNERDEAD
# define EOWNERDEAD 165 # define EOWNERDEAD 165
# endif
# ifndef ENOTRECOVERABLE
# define ENOTRECOVERABLE 166 # define ENOTRECOVERABLE 166
# endif # endif
@ -44,22 +49,4 @@
# define EHWPOISON 168 # define EHWPOISON 168
# endif # endif
# ifndef __ASSEMBLER__ #endif /* bits/errno.h. */
/* Function to get address of global `errno' variable. */
extern int *__errno_location (void) __THROW __attribute__ ((__const__));
# if !defined _LIBC || defined _LIBC_REENTRANT
/* When using threads, errno is a per-thread value. */
# define errno (*__errno_location ())
# endif
# endif /* !__ASSEMBLER__ */
#endif /* _ERRNO_H */
#if !defined _ERRNO_H && defined __need_Emath
/* This is ugly but the kernel header is not clean enough. We must
define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is
defined. */
# define EDOM 33 /* Math argument out of domain of function. */
# define EILSEQ 88 /* Illegal byte sequence. */
# define ERANGE 34 /* Math result not representable. */
#endif /* !_ERRNO_H && __need_Emath */

View File

@ -16,23 +16,29 @@
License along with the GNU C Library; if not, see License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#ifdef _ERRNO_H #ifndef _BITS_ERRNO_H
#define _BITS_ERRNO_H 1
#if !defined _ERRNO_H
# error "Never include <bits/errno.h> directly; use <errno.h> instead."
#endif
# undef EDOM
# undef EILSEQ
# undef ERANGE
# include <linux/errno.h> # include <linux/errno.h>
/* Linux has no ENOTSUP error code. */ /* Older Linux headers do not define these constants. */
# ifndef ENOTSUP
# define ENOTSUP EOPNOTSUPP # define ENOTSUP EOPNOTSUPP
# endif
# ifndef ECANCELED # ifndef ECANCELED
# define ECANCELED 127 # define ECANCELED 127
# endif # endif
/* Support for error codes to support robust mutexes was added later, too. */
# ifndef EOWNERDEAD # ifndef EOWNERDEAD
# define EOWNERDEAD 132 # define EOWNERDEAD 132
# endif
# ifndef ENOTRECOVERABLE
# define ENOTRECOVERABLE 133 # define ENOTRECOVERABLE 133
# endif # endif
@ -44,22 +50,4 @@
# define EHWPOISON 135 # define EHWPOISON 135
# endif # endif
# ifndef __ASSEMBLER__ #endif /* bits/errno.h. */
/* Function to get address of global `errno' variable. */
extern int *__errno_location (void) __THROW __attribute__ ((__const__));
# if !defined _LIBC || defined _LIBC_REENTRANT
/* When using threads, errno is a per-thread value. */
# define errno (*__errno_location ())
# endif
# endif /* !__ASSEMBLER__ */
#endif /* _ERRNO_H */
#if !defined _ERRNO_H && defined __need_Emath
/* This is ugly but the kernel header is not clean enough. We must
define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is
defined. */
# define EDOM 33 /* Math argument out of domain of function. */
# define EILSEQ 122 /* Illegal byte sequence. */
# define ERANGE 34 /* Math result not representable. */
#endif /* !_ERRNO_H && __need_Emath */

View File

@ -17,8 +17,7 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#define __need_Emath #include <errno.h>
#include <bits/errno.h>
/* Short algorithm description: /* Short algorithm description:
* *

View File

@ -17,8 +17,7 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#define __need_Emath #include <errno.h>
#include <bits/errno.h>
/* Short algorithm description: /* Short algorithm description:
* *

View File

@ -17,8 +17,7 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#define __need_Emath #include <errno.h>
#include <bits/errno.h>
/* Short algorithm description: /* Short algorithm description:
* *