aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/gnu
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2002-08-27 09:22:36 +0000
committerRoland McGrath <roland@gnu.org>2002-08-27 09:22:36 +0000
commit4022d8ed0374121e9f08aaaf657276de0e7642ed (patch)
tree076faaa602528376dd04e4cac67ca3edae4e8fb9 /sysdeps/gnu
parentb2ab1f5df8dac098eea5058f02f4d03c4143d5a2 (diff)
downloadglibc-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/Makefile22
-rw-r--r--sysdeps/gnu/Versions19
-rw-r--r--sysdeps/gnu/errlist-compat.awk104
-rw-r--r--sysdeps/gnu/errlist-compat.c42
-rw-r--r--sysdeps/gnu/errlist.awk34
-rw-r--r--sysdeps/gnu/errlist.c598
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