diff options
| author | Roland McGrath <roland@gnu.org> | 2002-08-27 09:22:36 +0000 |
|---|---|---|
| committer | Roland McGrath <roland@gnu.org> | 2002-08-27 09:22:36 +0000 |
| commit | 4022d8ed0374121e9f08aaaf657276de0e7642ed (patch) | |
| tree | 076faaa602528376dd04e4cac67ca3edae4e8fb9 /sysdeps/gnu | |
| parent | b2ab1f5df8dac098eea5058f02f4d03c4143d5a2 (diff) | |
| download | glibc-4022d8ed0374121e9f08aaaf657276de0e7642ed.tar.xz glibc-4022d8ed0374121e9f08aaaf657276de0e7642ed.zip | |
2002-08-26 Roland McGrath <roland@redhat.com>
* sysdeps/gnu/Versions: New file.
* sysdeps/unix/sysv/linux/Versions (libc: GLIBC_2.1): Remove
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr; from here.
* sysdeps/gnu/Makefile ($(..)sysdeps/gnu/errlist-compat.c): New target.
($(objpfx)errlist.d): Depend on $(..)sysdeps/gnu/errlist-compat.c.
* sysdeps/gnu/errlist.awk: Make output define _sys_errlist_internal
and _sys_nerr_internal instead of anything else. Make it include
"errlist-compat.c" if [!NOT_IN_libc && !ERRLIST_NO_COMPAT].
Make it emit some asm magic if [EMIT_ERR_MAX].
* sysdeps/gnu/errlist.c: Regenerated.
* sysdeps/gnu/errlist-compat.awk: New file.
* sysdeps/gnu/errlist-compat.c: New file (generated).
* sysdeps/mach/hurd/errlist.c (ERRLIST_NO_COMPAT): New macro.
(_sys_errlist_internal): Define this as a macro for _hurd_errlist.
(_sys_nerr_internal): Define this is a macro for _hurd_nerr.
(SYS_ERRLIST, SYS_NERR): Macros removed.
(sys_nerr, _sys_nerr): Remove these weak aliases.
* sysdeps/unix/sysv/linux/errlist.c: File removed.
* sysdeps/unix/sysv/linux/errlist.h: File removed.
* sysdeps/unix/sysv/linux/arm/errlist.c: File removed.
Diffstat (limited to 'sysdeps/gnu')
| -rw-r--r-- | sysdeps/gnu/Makefile | 22 | ||||
| -rw-r--r-- | sysdeps/gnu/Versions | 19 | ||||
| -rw-r--r-- | sysdeps/gnu/errlist-compat.awk | 104 | ||||
| -rw-r--r-- | sysdeps/gnu/errlist-compat.c | 42 | ||||
| -rw-r--r-- | sysdeps/gnu/errlist.awk | 34 | ||||
| -rw-r--r-- | sysdeps/gnu/errlist.c | 598 |
6 files changed, 785 insertions, 34 deletions
diff --git a/sysdeps/gnu/Makefile b/sysdeps/gnu/Makefile index ab0b15905d..65b9258507 100644 --- a/sysdeps/gnu/Makefile +++ b/sysdeps/gnu/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1996, 97, 98, 99 Free Software Foundation, Inc. +# Copyright (C) 1996,97,98,99,2001,02 Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C Library is free software; you can redistribute it and/or @@ -29,6 +29,26 @@ ifeq ($(with-cvs),yes) test ! -d CVS || cvs commit -m'Regenerated from $^' $@ endif +vpath errlist.c $(full_config_sysdirs) +$(..)sysdeps/gnu/errlist-compat.c: errlist.c \ + $(..)sysdeps/gnu/errlist-compat.awk \ + $(..)sysdeps/gnu/Versions + $(AWK) -v maxerr=`\ + $(CC) -S $(CPPFLAGS) $(CFLAGS) -DNOT_IN_libc -DEMIT_ERR_MAX $< -o - \ + | sed -n 's/^.*@@@[^0-9]*\([0-9]*\)[^0-9]*@@@.*$$/\1/p'` \ + -f $(filter-out $<,$^) > $@T +# Make it unwritable so noone will edit it by mistake. + -chmod a-w $@T + mv -f $@T $@ +ifeq ($(with-cvs),yes) + test ! -d CVS || cvs commit -m'Regenerated from $^' $@ +endif + +ifeq ($(subdir),stdio-common) +# This will force the generation above to happy if need be. +$(objpfx)errlist.d: $(..)sysdeps/gnu/errlist-compat.c +endif + ifeq ($(subdir),login) sysdep_routines += setutxent getutxent endutxent getutxid getutxline \ pututxline utmpxname updwtmpx getutmpx getutmp diff --git a/sysdeps/gnu/Versions b/sysdeps/gnu/Versions new file mode 100644 index 0000000000..145dd0acae --- /dev/null +++ b/sysdeps/gnu/Versions @@ -0,0 +1,19 @@ +libc { + # The comment lines with "#errlist-compat" are magic; see errlist-compat.awk. + # When you get an error from errlist-compat.awk, you need to add a new + # version here. Don't do this blindly, since this means changing the ABI + # for all GNU/Linux configurations. + + GLIBC_2.0 { + #errlist-compat 123 + _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; + } + GLIBC_2.1 { + #errlist-compat 125 + _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; + } + GLIBC_2.3 { + #errlist-compat 126 + _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; + } +} diff --git a/sysdeps/gnu/errlist-compat.awk b/sysdeps/gnu/errlist-compat.awk new file mode 100644 index 0000000000..84cee1565b --- /dev/null +++ b/sysdeps/gnu/errlist-compat.awk @@ -0,0 +1,104 @@ +# awk script to generate errlist-compat.c +# Copyright (C) 2002 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, write to the Free +# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +# 02111-1307 USA. + +# +# This script takes the Versions file as input and looks for #errlist-compat +# magic comments, which have the form: +# #errlist-compat NNN +# where NNN is the number of elements in the sys_errlist for that version set. +# We need the awk variable `maxerr' defined to the current size of sys_errlist. +# +# If there is no magic comment matching the current size, we barf. +# Otherwise we generate code (errlist-compat.c) to define all the +# necessary compatibility symbols for older, smaller versions of sys_errlist. +# + +BEGIN { highest = 0 } + +# These two rules catch the Versions file contents. +NF == 2 && $2 == "{" { last_version = $1; next } +$1 == "#errlist-compat" { + n = $2 + 0; + if (n < 100) { + print "*** this line seems bogus:", $0 > "/dev/stderr"; + exit 1; + } + version[n] = last_version; + if (n > highest) + highest = n; + next; +} + +END { + count = maxerr + 1; + + if (highest != count) { + printf "*** errlist.c count %d vs Versions sys_errlist@%s count %d\n", \ + count, version[highest], highest > "/dev/stderr"; + exit 1; + } + + lastv = ""; + for (n = 0; n <= count; ++n) + if (n in version) { + v = version[n]; + gsub(/[^A-Z0-9_]/, "_", v); + if (lastv != "") + compat[lastv] = v; + lastv = v; + vcount[v] = n; + } + + print "/* This file was generated by errlist-compat.awk; DO NOT EDIT! */\n"; + print "#include <shlib-compat.h>\n"; + + for (old in compat) { + new = compat[old]; + n = vcount[old]; + printf "#if SHLIB_COMPAT (libc, %s, %s)\n", old, new; + printf "extern const char *const __sys_errlist_%s[];\n", old; + printf "const int __sys_nerr_%s = %d;\n", old, n; + printf "strong_alias (_sys_errlist_internal, __sys_errlist_%s)\n", old; + printf "declare_symbol (__sys_errlist_%s, object, __WORDSIZE/8*%d)\n", \ + old, n; + printf "compat_symbol (libc, __sys_errlist_%s, sys_errlist, %s);\n", \ + old, old; + printf "compat_symbol (libc, __sys_nerr_%s, sys_nerr, %s);\n", old, old; + + printf "extern const char *const ___sys_errlist_%s[];\n", old; + printf "extern const int __sys_nerr_%s;\n", old; + printf "strong_alias (__sys_errlist_%s, ___sys_errlist_%s)\n", old, old; + printf "strong_alias (__sys_nerr_%s, ___sys_nerr_%s)\n", old, old; + printf "compat_symbol (libc, ___sys_errlist_%s, _sys_errlist, %s);\n", \ + old, old; + printf "compat_symbol (libc, ___sys_nerr_%s, _sys_nerr, %s);\n", old, old; + printf "#endif\n\n"; + } + + printf "\ +extern const char *const __sys_errlist_internal[];\n\ +extern const int __sys_nerr_internal;\n\ +strong_alias (_sys_errlist_internal, __sys_errlist_internal)\n\ +strong_alias (_sys_nerr_internal, __sys_nerr_internal)\n\ +versioned_symbol (libc, _sys_errlist_internal, sys_errlist, %s);\n\ +versioned_symbol (libc, __sys_errlist_internal, _sys_errlist, %s);\n\ +versioned_symbol (libc, _sys_nerr_internal, sys_nerr, %s);\n\ +versioned_symbol (libc, __sys_nerr_internal, _sys_nerr, %s);\n", \ + lastv, lastv, lastv, lastv; +} diff --git a/sysdeps/gnu/errlist-compat.c b/sysdeps/gnu/errlist-compat.c new file mode 100644 index 0000000000..56766bfd0f --- /dev/null +++ b/sysdeps/gnu/errlist-compat.c @@ -0,0 +1,42 @@ +/* This file was generated by errlist-compat.awk; DO NOT EDIT! */ + +#include <shlib-compat.h> + +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) +extern const char *const __sys_errlist_GLIBC_2_0[]; +const int __sys_nerr_GLIBC_2_0 = 123; +strong_alias (_sys_errlist_internal, __sys_errlist_GLIBC_2_0) +declare_symbol (__sys_errlist_GLIBC_2_0, object, __WORDSIZE/8*123) +compat_symbol (libc, __sys_errlist_GLIBC_2_0, sys_errlist, GLIBC_2_0); +compat_symbol (libc, __sys_nerr_GLIBC_2_0, sys_nerr, GLIBC_2_0); +extern const char *const ___sys_errlist_GLIBC_2_0[]; +extern const int __sys_nerr_GLIBC_2_0; +strong_alias (__sys_errlist_GLIBC_2_0, ___sys_errlist_GLIBC_2_0) +strong_alias (__sys_nerr_GLIBC_2_0, ___sys_nerr_GLIBC_2_0) +compat_symbol (libc, ___sys_errlist_GLIBC_2_0, _sys_errlist, GLIBC_2_0); +compat_symbol (libc, ___sys_nerr_GLIBC_2_0, _sys_nerr, GLIBC_2_0); +#endif + +#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_3) +extern const char *const __sys_errlist_GLIBC_2_1[]; +const int __sys_nerr_GLIBC_2_1 = 125; +strong_alias (_sys_errlist_internal, __sys_errlist_GLIBC_2_1) +declare_symbol (__sys_errlist_GLIBC_2_1, object, __WORDSIZE/8*125) +compat_symbol (libc, __sys_errlist_GLIBC_2_1, sys_errlist, GLIBC_2_1); +compat_symbol (libc, __sys_nerr_GLIBC_2_1, sys_nerr, GLIBC_2_1); +extern const char *const ___sys_errlist_GLIBC_2_1[]; +extern const int __sys_nerr_GLIBC_2_1; +strong_alias (__sys_errlist_GLIBC_2_1, ___sys_errlist_GLIBC_2_1) +strong_alias (__sys_nerr_GLIBC_2_1, ___sys_nerr_GLIBC_2_1) +compat_symbol (libc, ___sys_errlist_GLIBC_2_1, _sys_errlist, GLIBC_2_1); +compat_symbol (libc, ___sys_nerr_GLIBC_2_1, _sys_nerr, GLIBC_2_1); +#endif + +extern const char *const __sys_errlist_internal[]; +extern const int __sys_nerr_internal; +strong_alias (_sys_errlist_internal, __sys_errlist_internal) +strong_alias (_sys_nerr_internal, __sys_nerr_internal) +versioned_symbol (libc, _sys_errlist_internal, sys_errlist, GLIBC_2_3); +versioned_symbol (libc, __sys_errlist_internal, _sys_errlist, GLIBC_2_3); +versioned_symbol (libc, _sys_nerr_internal, sys_nerr, GLIBC_2_3); +versioned_symbol (libc, __sys_nerr_internal, _sys_nerr, GLIBC_2_3); diff --git a/sysdeps/gnu/errlist.awk b/sysdeps/gnu/errlist.awk index 317dc44930..b9b1291a59 100644 --- a/sysdeps/gnu/errlist.awk +++ b/sysdeps/gnu/errlist.awk @@ -42,22 +42,16 @@ BEGIN { print "#include <errno.h>"; print "#include <libintl.h>"; print ""; - print "#ifndef SYS_ERRLIST"; - print "# define SYS_ERRLIST _sys_errlist"; - print "# define SYS_ERRLIST_ALIAS sys_errlist"; - print "#endif"; - print "#ifndef SYS_NERR"; - print "# define SYS_NERR _sys_nerr"; - print "# define SYS_NERR_ALIAS sys_nerr"; - print "#endif"; print "#ifndef ERR_REMAP"; print "# define ERR_REMAP(n) n"; print "#endif"; print ""; - print "const char *const SYS_ERRLIST[] ="; + + print "const char *const _sys_errlist_internal[] ="; print " {"; print " [0] = N_(\"Success\")," } + $1 == "@comment" && $2 == "errno.h" { errnoh=1; next } errnoh == 1 && $1 == "@comment" \ { @@ -86,6 +80,10 @@ errnoh == 4 && $1 == "@end" && $2 == "deftypevr" \ { printf "/*%s */\n", desc; printf " [ERR_REMAP (%s)] = N_(\"%s\"),\n", e, etext; + printf "# if %s > ERR_MAX\n", e; + print "# undef ERR_MAX"; + printf "# define ERR_MAX %s\n", e; + print "# endif"; print "#endif"; errnoh = 0; next; @@ -99,13 +97,15 @@ errnoh == 4 \ END { print " };"; print ""; - print "const int SYS_NERR = sizeof SYS_ERRLIST / sizeof SYS_ERRLIST [0];"; - print "#ifdef SYS_ERRLIST_ALIAS"; - print "weak_alias (_sys_errlist, SYS_ERRLIST_ALIAS)"; + print "const int _sys_nerr_internal"; + print " = sizeof _sys_errlist_internal / sizeof _sys_errlist_internal [0];"; + print ""; + print "#if !defined NOT_IN_libc && !ERRLIST_NO_COMPAT"; + print "# include \"errlist-compat.c\""; print "#endif"; - print "#ifdef SYS_NERR_ALIAS"; - print "weak_alias (_sys_nerr, SYS_NERR_ALIAS)"; + print ""; + print "#ifdef EMIT_ERR_MAX"; + print "void dummy (void)" + print "{ asm volatile (\" @@@ %0 @@@ \" : : \"i\" (ERR_REMAP (ERR_MAX))); }" print "#endif"; - print "INTVARDEF2(SYS_ERRLIST, _sys_errlist)"; - print "INTVARDEF2(SYS_NERR, _sys_nerr)"; - } +} diff --git a/sysdeps/gnu/errlist.c b/sysdeps/gnu/errlist.c index eec91c757f..7261a510bf 100644 --- a/sysdeps/gnu/errlist.c +++ b/sysdeps/gnu/errlist.c @@ -3,19 +3,11 @@ #include <errno.h> #include <libintl.h> -#ifndef SYS_ERRLIST -# define SYS_ERRLIST _sys_errlist -# define SYS_ERRLIST_ALIAS sys_errlist -#endif -#ifndef SYS_NERR -# define SYS_NERR _sys_nerr -# define SYS_NERR_ALIAS sys_nerr -#endif #ifndef ERR_REMAP # define ERR_REMAP(n) n #endif -const char *const SYS_ERRLIST[] = +const char *const _sys_errlist_internal[] = { [0] = N_("Success"), #ifdef EPERM @@ -23,6 +15,10 @@ const char *const SYS_ERRLIST[] = TRANS Operation not permitted; only the owner of the file (or other resource) TRANS or processes with special privileges can perform the operation. */ [ERR_REMAP (EPERM)] = N_("Operation not permitted"), +# if EPERM > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EPERM +# endif #endif #ifdef ENOENT /* @@ -30,11 +26,19 @@ TRANS No such file or directory. This is a ``file doesn't exist'' error TRANS for ordinary files that are referenced in contexts where they are TRANS expected to already exist. */ [ERR_REMAP (ENOENT)] = N_("No such file or directory"), +# if ENOENT > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOENT +# endif #endif #ifdef ESRCH /* TRANS No process matches the specified process ID. */ [ERR_REMAP (ESRCH)] = N_("No such process"), +# if ESRCH > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ESRCH +# endif #endif #ifdef EINTR /* @@ -46,11 +50,19 @@ TRANS You can choose to have functions resume after a signal that is handled, TRANS rather than failing with @code{EINTR}; see @ref{Interrupted TRANS Primitives}. */ [ERR_REMAP (EINTR)] = N_("Interrupted system call"), +# if EINTR > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EINTR +# endif #endif #ifdef EIO /* TRANS Input/output error; usually used for physical read or write errors. */ [ERR_REMAP (EIO)] = N_("Input/output error"), +# if EIO > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EIO +# endif #endif #ifdef ENXIO /* @@ -60,6 +72,10 @@ TRANS This can mean that the device file was installed incorrectly, or that TRANS the physical device is missing or not correctly attached to the TRANS computer. */ [ERR_REMAP (ENXIO)] = N_("No such device or address"), +# if ENXIO > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENXIO +# endif #endif #ifdef E2BIG /* @@ -68,12 +84,20 @@ TRANS being executed with one of the @code{exec} functions (@pxref{Executing a TRANS File}) occupy too much memory space. This condition never arises in the TRANS GNU system. */ [ERR_REMAP (E2BIG)] = N_("Argument list too long"), +# if E2BIG > ERR_MAX +# undef ERR_MAX +# define ERR_MAX E2BIG +# endif #endif #ifdef ENOEXEC /* TRANS Invalid executable file format. This condition is detected by the TRANS @code{exec} functions; see @ref{Executing a File}. */ [ERR_REMAP (ENOEXEC)] = N_("Exec format error"), +# if ENOEXEC > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOEXEC +# endif #endif #ifdef EBADF /* @@ -81,6 +105,10 @@ TRANS Bad file descriptor; for example, I/O on a descriptor that has been TRANS closed or reading from a descriptor open only for writing (or vice TRANS versa). */ [ERR_REMAP (EBADF)] = N_("Bad file descriptor"), +# if EBADF > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EBADF +# endif #endif #ifdef ECHILD /* @@ -88,6 +116,10 @@ TRANS There are no child processes. This error happens on operations that are TRANS supposed to manipulate child processes, when there aren't any processes TRANS to manipulate. */ [ERR_REMAP (ECHILD)] = N_("No child processes"), +# if ECHILD > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ECHILD +# endif #endif #ifdef EDEADLK /* @@ -96,23 +128,39 @@ TRANS deadlock situation. The system does not guarantee that it will notice TRANS all such situations. This error means you got lucky and the system TRANS noticed; it might just hang. @xref{File Locks}, for an example. */ [ERR_REMAP (EDEADLK)] = N_("Resource deadlock avoided"), +# if EDEADLK > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EDEADLK +# endif #endif #ifdef ENOMEM /* TRANS No memory available. The system cannot allocate more virtual memory TRANS because its capacity is full. */ [ERR_REMAP (ENOMEM)] = N_("Cannot allocate memory"), +# if ENOMEM > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOMEM +# endif #endif #ifdef EACCES /* TRANS Permission denied; the file permissions do not allow the attempted operation. */ [ERR_REMAP (EACCES)] = N_("Permission denied"), +# if EACCES > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EACCES +# endif #endif #ifdef EFAULT /* TRANS Bad address; an invalid pointer was detected. TRANS In the GNU system, this error never happens; you get a signal instead. */ [ERR_REMAP (EFAULT)] = N_("Bad address"), +# if EFAULT > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EFAULT +# endif #endif #ifdef ENOTBLK /* @@ -120,6 +168,10 @@ TRANS A file that isn't a block special file was given in a situation that TRANS requires one. For example, trying to mount an ordinary file as a file TRANS system in Unix gives this error. */ [ERR_REMAP (ENOTBLK)] = N_("Block device required"), +# if ENOTBLK > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOTBLK +# endif #endif #ifdef EBUSY /* @@ -127,12 +179,20 @@ TRANS Resource busy; a system resource that can't be shared is already in use. TRANS For example, if you try to delete a file that is the root of a currently TRANS mounted filesystem, you get this error. */ [ERR_REMAP (EBUSY)] = N_("Device or resource busy"), +# if EBUSY > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EBUSY +# endif #endif #ifdef EEXIST /* TRANS File exists; an existing file was specified in a context where it only TRANS makes sense to specify a new file. */ [ERR_REMAP (EEXIST)] = N_("File exists"), +# if EEXIST > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EEXIST +# endif #endif #ifdef EXDEV /* @@ -140,29 +200,49 @@ TRANS An attempt to make an improper link across file systems was detected. TRANS This happens not only when you use @code{link} (@pxref{Hard Links}) but TRANS also when you rename a file with @code{rename} (@pxref{Renaming Files}). */ [ERR_REMAP (EXDEV)] = N_("Invalid cross-device link"), +# if EXDEV > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EXDEV +# endif #endif #ifdef ENODEV /* TRANS The wrong type of device was given to a function that expects a TRANS particular sort of device. */ [ERR_REMAP (ENODEV)] = N_("No such device"), +# if ENODEV > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENODEV +# endif #endif #ifdef ENOTDIR /* TRANS A file that isn't a directory was specified when a directory is required. */ [ERR_REMAP (ENOTDIR)] = N_("Not a directory"), +# if ENOTDIR > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOTDIR +# endif #endif #ifdef EISDIR /* TRANS File is a directory; you cannot open a directory for writing, TRANS or create or remove hard links to it. */ [ERR_REMAP (EISDIR)] = N_("Is a directory"), +# if EISDIR > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EISDIR +# endif #endif #ifdef EINVAL /* TRANS Invalid argument. This is used to indicate various kinds of problems TRANS with passing the wrong argument to a library function. */ [ERR_REMAP (EINVAL)] = N_("Invalid argument"), +# if EINVAL > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EINVAL +# endif #endif #ifdef EMFILE /* @@ -174,6 +254,10 @@ TRANS limit that can usually be increased. If you get this error, you might TRANS want to increase the @code{RLIMIT_NOFILE} limit or make it unlimited; TRANS @pxref{Limits on Resources}. */ [ERR_REMAP (EMFILE)] = N_("Too many open files"), +# if EMFILE > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EMFILE +# endif #endif #ifdef ENFILE /* @@ -181,12 +265,20 @@ TRANS There are too many distinct file openings in the entire system. Note TRANS that any number of linked channels count as just one file opening; see TRANS @ref{Linked Channels}. This error never occurs in the GNU system. */ [ERR_REMAP (ENFILE)] = N_("Too many open files in system"), +# if ENFILE > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENFILE +# endif #endif #ifdef ENOTTY /* TRANS Inappropriate I/O control operation, such as trying to set terminal TRANS modes on an ordinary file. */ [ERR_REMAP (ENOTTY)] = N_("Inappropriate ioctl for device"), +# if ENOTTY > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOTTY +# endif #endif #ifdef ETXTBSY /* @@ -196,27 +288,47 @@ TRANS debugger to run a program is considered having it open for writing and TRANS will cause this error. (The name stands for ``text file busy''.) This TRANS is not an error in the GNU system; the text is copied as necessary. */ [ERR_REMAP (ETXTBSY)] = N_("Text file busy"), +# if ETXTBSY > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ETXTBSY +# endif #endif #ifdef EFBIG /* TRANS File too big; the size of a file would be larger than allowed by the system. */ [ERR_REMAP (EFBIG)] = N_("File too large"), +# if EFBIG > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EFBIG +# endif #endif #ifdef ENOSPC /* TRANS No space left on device; write operation on a file failed because the TRANS disk is full. */ [ERR_REMAP (ENOSPC)] = N_("No space left on device"), +# if ENOSPC > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ENOSPC +# endif #endif #ifdef ESPIPE /* TRANS Invalid seek operation (such as on a pipe). */ [ERR_REMAP (ESPIPE)] = N_("Illegal seek"), +# if ESPIPE > ERR_MAX +# undef ERR_MAX +# define ERR_MAX ESPIPE +# endif #endif #ifdef EROFS /* TRANS An attempt was made to modify something on a read-only file system. */ [ERR_REMAP (EROFS)] = N_("Read-only file system"), +# if EROFS > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EROFS +# endif #endif #ifdef EMLINK /* @@ -224,6 +336,10 @@ TRANS Too many links; the link count of a single file would become too large. TRANS @code{rename} can cause this error if the file being renamed already has TRANS as many links as it can take (@pxref{Renaming Files}). */ [ERR_REMAP (EMLINK)] = N_("Too many links"), +# if EMLINK > ERR_MAX +# undef ERR_MAX +# define ERR_MAX EMLINK +# endif #endif #ifdef EPIPE /* @@ -233,18 +349,30 @@ TRANS @code{SIGPIPE} signal; this signal terminates the program if not handled TRANS or blocked. Thus, your program will never actually see @code{EPIPE} TR |
