summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS6
-rw-r--r--include/stdio.h2
-rw-r--r--libio/Makefile2
-rw-r--r--libio/stdio.h6
-rwxr-xr-xscripts/build-many-glibcs.py3
-rw-r--r--stdio-common/Makefile11
-rw-r--r--stdio-common/errlist-compat.c1
-rw-r--r--stdio-common/errlist.c30
-rwxr-xr-xstdio-common/tst-errno-manual.py73
-rw-r--r--string/_strerror.c6
-rw-r--r--string/strerror_l.c8
-rw-r--r--string/xpg-strerror.c9
-rw-r--r--sysdeps/gnu/Makefile43
-rw-r--r--sysdeps/gnu/errlist-compat.awk133
-rw-r--r--sysdeps/gnu/errlist.awk110
-rw-r--r--sysdeps/gnu/errlist.c1495
-rw-r--r--sysdeps/gnu/errlist.h799
-rw-r--r--sysdeps/mach/hurd/err_hurd.sub5
-rw-r--r--sysdeps/mach/hurd/errlist.c11
-rw-r--r--sysdeps/unix/sysv/linux/Versions10
-rw-r--r--sysdeps/unix/sysv/linux/alpha/Versions12
-rw-r--r--sysdeps/unix/sysv/linux/alpha/errlist-compat.c43
-rw-r--r--sysdeps/unix/sysv/linux/errlist-compat.c (renamed from sysdeps/unix/sysv/linux/bits/sys_errlist.h)29
-rw-r--r--sysdeps/unix/sysv/linux/errlist-compat.h43
-rw-r--r--sysdeps/unix/sysv/linux/hppa/Versions10
-rw-r--r--sysdeps/unix/sysv/linux/hppa/errlist-compat.c39
-rw-r--r--sysdeps/unix/sysv/linux/mips/Versions7
-rw-r--r--sysdeps/unix/sysv/linux/mips/errlist-compat.c (renamed from bits/sys_errlist.h)14
-rw-r--r--sysdeps/unix/sysv/linux/sparc/Versions10
-rw-r--r--sysdeps/unix/sysv/linux/sparc/errlist-compat.c43
30 files changed, 1115 insertions, 1898 deletions
diff --git a/NEWS b/NEWS
index b93c06d744..482d2253e0 100644
--- a/NEWS
+++ b/NEWS
@@ -73,6 +73,12 @@ Deprecated and removed features, and other changes affecting compatibility:
compatibility symbols to support old binaries. All programs should use
strsignal instead.
+* The deprecated symbols sys_errlist, _sys_errlist, sys_nerr, and _sys_nerr
+ are no longer available to newly linked binaries, and their declarations
+ have been removed from from <stdio.h>. They are exported solely as
+ compatibility symbols to support old binaries. All programs should use
+ strerror or strerror_r instead.
+
Changes to build and runtime requirements:
* powerpc64le requires GCC 7.4 or newer. This is required for supporting
diff --git a/include/stdio.h b/include/stdio.h
index 9df98b2833..9e3bf6fe42 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -186,7 +186,7 @@ ssize_t __libc_readline_unlocked (FILE *fp, char *buffer, size_t length);
libc_hidden_proto (__libc_readline_unlocked);
extern const char *const _sys_errlist_internal[] attribute_hidden;
-extern int _sys_nerr_internal attribute_hidden;
+extern const char *__get_errlist (int) attribute_hidden;
libc_hidden_ldbl_proto (__asprintf)
diff --git a/libio/Makefile b/libio/Makefile
index 59e1f68e9c..926df1870b 100644
--- a/libio/Makefile
+++ b/libio/Makefile
@@ -23,7 +23,7 @@ subdir := libio
include ../Makeconfig
headers := stdio.h \
- bits/stdio.h bits/stdio2.h bits/sys_errlist.h bits/stdio-ldbl.h \
+ bits/stdio.h bits/stdio2.h bits/stdio-ldbl.h \
bits/types/FILE.h bits/types/__FILE.h bits/types/struct_FILE.h \
bits/types/__fpos_t.h bits/types/__fpos64_t.h \
bits/types/cookie_io_functions_t.h
diff --git a/libio/stdio.h b/libio/stdio.h
index 07f2d9afb5..998470943e 100644
--- a/libio/stdio.h
+++ b/libio/stdio.h
@@ -779,12 +779,6 @@ extern int ferror_unlocked (FILE *__stream) __THROW __wur;
marked with __THROW. */
extern void perror (const char *__s);
-/* Provide the declarations for `sys_errlist' and `sys_nerr' if they
- are available on this system. Even if available, these variables
- should not be used directly. The `strerror' function provides
- all the necessary functionality. */
-#include <bits/sys_errlist.h>
-
#ifdef __USE_POSIX
/* Return the system file descriptor for STREAM. */
diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py
index 8c72b9e571..07e9b457da 100755
--- a/scripts/build-many-glibcs.py
+++ b/scripts/build-many-glibcs.py
@@ -892,8 +892,7 @@ class Context(object):
# Some other files have such dependencies but do not need to
# be touched because nothing in a build depends on the files
# in question.
- for f in ('sysdeps/gnu/errlist.c',
- 'sysdeps/mach/hurd/bits/errno.h'):
+ for f in ('sysdeps/mach/hurd/bits/errno.h',):
to_touch = os.path.join(srcdir, f)
subprocess.run(['touch', '-c', to_touch], check=True)
for dirpath, dirnames, filenames in os.walk(srcdir):
diff --git a/stdio-common/Makefile b/stdio-common/Makefile
index 1333203046..73bf0da296 100644
--- a/stdio-common/Makefile
+++ b/stdio-common/Makefile
@@ -85,6 +85,8 @@ generated += tst-printf-bz18872.c tst-printf-bz18872.mtrace \
tst-printf-bz25691.mtrace tst-printf-bz25691-mem.out
endif
+tests-special += $(objpfx)tst-errno-manual.out
+
include ../Rules
ifeq ($(run-built-tests),yes)
@@ -129,6 +131,15 @@ $(objpfx)tst-%-mem.out: $(objpfx)tst-%.out
$(common-objpfx)malloc/mtrace $(objpfx)tst-$*.mtrace > $@; \
$(evaluate-test)
+errlist-h = $(firstword $(wildcard $(addsuffix /errlist.h,$(sysdirs) .)))
+
+$(objpfx)tst-errno-manual.out: tst-errno-manual.py \
+ $(errlist-h) \
+ $(..)manual/errno.texi
+ $(PYTHON) tst-errno-manual.py -m $(..)manual/errno.texi \
+ -e $(errlist-h) > $@; \
+ $(evaluate-test)
+
CFLAGS-vfprintf.c += -Wno-uninitialized
CFLAGS-vfwprintf.c += -Wno-uninitialized
diff --git a/stdio-common/errlist-compat.c b/stdio-common/errlist-compat.c
new file mode 100644
index 0000000000..6e25b021ab
--- /dev/null
+++ b/stdio-common/errlist-compat.c
@@ -0,0 +1 @@
+/* Empty. */
diff --git a/stdio-common/errlist.c b/stdio-common/errlist.c
index 91fa789be0..df52356066 100644
--- a/stdio-common/errlist.c
+++ b/stdio-common/errlist.c
@@ -15,22 +15,24 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
+#include <stdio.h>
+#include <errno.h>
+#include <libintl.h>
#include <array_length.h>
-#include <stddef.h>
-const char *const _sys_errlist[] =
+const char *const _sys_errlist_internal[] =
{
- "Error 0", /* 0 */
- "Argument out of function's domain", /* 1 = EDOM */
- "Result out of range", /* 2 = ERANGE */
- "Operation not implemented", /* 3 = ENOSYS */
- "Invalid argument", /* 4 = EINVAL */
- "Illegal seek", /* 5 = ESPIPE */
- "Bad file descriptor", /* 6 = EBADF */
- "Cannot allocate memory", /* 7 = ENOMEM */
- "Permission denied", /* 8 = EACCES */
- "Too many open files in system", /* 9 = ENFILE */
- "Too many open files", /* 10 = EMFILE */
+#define _S(n, str) [n] = str,
+#include <errlist.h>
+#undef _S
};
-const int _sys_nerr = array_length (_sys_errlist);
+const char *
+__get_errlist (int errnum)
+{
+ if (errnum >= 0 && errnum < array_length (_sys_errlist_internal))
+ return _sys_errlist_internal[errnum];
+ return NULL;
+}
+
+#include <errlist-compat.c>
diff --git a/stdio-common/tst-errno-manual.py b/stdio-common/tst-errno-manual.py
new file mode 100755
index 0000000000..618120f4f0
--- /dev/null
+++ b/stdio-common/tst-errno-manual.py
@@ -0,0 +1,73 @@
+#!/usr/bin/python3
+# Check is all errno definitions at errlist.h documented in the manual.
+# Copyright (C) 2020 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, see
+# <https://www.gnu.org/licenses/>.
+
+import argparse
+import sys
+import re
+
+RE_MANUAL = re.compile(
+ r'(?:^@errno){(\w+)')
+
+RE_ERRLIST = re.compile(
+ r'\(E[a-zA-Z0-9]+\)')
+
+PASS=0
+FAIL=1
+
+# Each manual entry is in the form:
+#
+# errno{EAGAIN, 35, Resource temporarily unavailable}
+def parse_manual(f):
+ errlist = [RE_MANUAL.findall(s) for s in f]
+ return map(lambda x : x[0], filter(None, errlist))
+
+# Each errlist entry is in the form:
+#
+# _S(ERR_MAP(EAGAIN), N_("Resource temporarily unavailable"))
+def parse_errlist(f):
+ errlist = [RE_ERRLIST.findall(s) for s in f]
+ # Each element is '[]' or '['(EAGAIN)']'
+ return map(lambda s : s[0][s[0].find('(')+1:s[0].find(')')],
+ filter(None, errlist))
+
+def check_errno_definitions(manual_fname, errlist_fname):
+ with open(manual_fname, 'r') as mfile, open(errlist_fname, 'r') as efile:
+ merr = parse_manual(mfile)
+ eerr = parse_errlist(efile)
+ diff = set(eerr).difference(merr)
+ if not diff:
+ sys.exit(PASS)
+ else:
+ print("Failure: the following value(s) are not in manual:",
+ ", ".join(str(e) for e in diff))
+ sys.exit(FAIL)
+
+def main():
+ parser = argparse.ArgumentParser(description='Generate errlist.h')
+ parser.add_argument('-m', dest='manual', metavar='FILE',
+ help='manual errno texi file')
+ parser.add_argument('-e', dest='errlist', metavar='FILE',
+ help='errlist with errno definitions')
+ args = parser.parse_args()
+
+ check_errno_definitions(args.manual, args.errlist)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/string/_strerror.c b/string/_strerror.c
index af6be56fdc..01226e3d4b 100644
--- a/string/_strerror.c
+++ b/string/_strerror.c
@@ -36,8 +36,8 @@
char *
__strerror_r (int errnum, char *buf, size_t buflen)
{
- if (__builtin_expect (errnum < 0 || errnum >= _sys_nerr_internal
- || _sys_errlist_internal[errnum] == NULL, 0))
+ char *err = (char *) __get_errlist (errnum);
+ if (__glibc_unlikely (err == NULL))
{
/* Buffer we use to print the number in. For a maximum size for
`int' of 8 bytes we never need more than 20 digits. */
@@ -68,7 +68,7 @@ __strerror_r (int errnum, char *buf, size_t buflen)
return buf;
}
- return (char *) _(_sys_errlist_internal[errnum]);
+ return _(err);
}
weak_alias (__strerror_r, strerror_r)
libc_hidden_def (__strerror_r)
diff --git a/string/strerror_l.c b/string/strerror_l.c
index c8c3d4a6ef..309f42e66b 100644
--- a/string/strerror_l.c
+++ b/string/strerror_l.c
@@ -40,10 +40,8 @@ translate (const char *str, locale_t loc)
char *
strerror_l (int errnum, locale_t loc)
{
-
-
- if (__builtin_expect (errnum < 0 || errnum >= _sys_nerr_internal
- || _sys_errlist_internal[errnum] == NULL, 0))
+ char *err = (char *) __get_errlist (errnum);
+ if (__glibc_unlikely (err == NULL))
{
free (last_value);
if (__asprintf (&last_value, "%s%d",
@@ -53,7 +51,7 @@ strerror_l (int errnum, locale_t loc)
return last_value;
}
- return (char *) translate (_sys_errlist_internal[errnum], loc);
+ return (char *) translate (err, loc);
}
void
diff --git a/string/xpg-strerror.c b/string/xpg-strerror.c
index 5290b63f18..95311b75e9 100644
--- a/string/xpg-strerror.c
+++ b/string/xpg-strerror.c
@@ -32,16 +32,9 @@ __xpg_strerror_r (int errnum, char *buf, size_t buflen)
string) if errnum is invalid, otherwise it returns a string whose
storage has indefinite extent. */
if (estr == buf)
- {
- assert (errnum < 0 || errnum >= _sys_nerr_internal
- || _sys_errlist_internal[errnum] == NULL);
- return EINVAL;
- }
+ return EINVAL;
else
{
- assert (errnum >= 0 && errnum < _sys_nerr_internal
- && _sys_errlist_internal[errnum] != NULL);
-
size_t estrlen = strlen (estr);
/* Terminate the string in any case. */
diff --git a/sysdeps/gnu/Makefile b/sysdeps/gnu/Makefile
index 97fcb6fb90..9cf34c8ac6 100644
--- a/sysdeps/gnu/Makefile
+++ b/sysdeps/gnu/Makefile
@@ -15,49 +15,6 @@
# License along with the GNU C Library; if not, see
# <https://www.gnu.org/licenses/>.
-# Generate the list of strings for errno codes from the section of the
-# manual which documents the codes.
-
-$(..)sysdeps/gnu/errlist.c: $(..)sysdeps/gnu/errlist.awk \
- $(..)manual/errno.texi
- $(AWK) -f $^ > $@-tmp
-# Make it unwritable so noone will edit it by mistake.
- -chmod a-w $@-tmp
- mv -f $@-tmp $@
-
-ifeq ($(subdir),stdio-common)
-
-errlist-c = $(firstword $(wildcard $(addsuffix /errlist.c,$(sysdirs) .)))
-
-libof-errlist-compat = extramodules
-
-ifeq ($(build-shared),yes)
-$(objpfx)errlist-compat.c: $(errlist-c) $(..)sysdeps/gnu/errlist-compat.awk \
- $(common-objpfx)Versions.v.i $(before-compile)
-else
-$(objpfx)errlist-compat.c: $(errlist-c) $(..)sysdeps/gnu/errlist-compat.awk \
- $(before-compile)
-endif
- $(make-target-directory)
- $(AWK) -v maxerr=`\
- $(CC) -S $(CPPFLAGS) $(CFLAGS) -DEMIT_ERR_MAX $< -o - \
- | sed -n 's/^.*@@@[^0-9]*\([0-9]*\)[^0-9]*@@@.*$$/\1/p'` \
- -f $(..)sysdeps/gnu/errlist-compat.awk \
- $(wildcard $(sysdirs:=/Versions)) > $@T
-# Make it unwritable so noone will edit it by mistake.
- -chmod a-w $@T
- mv -f $@T $@
-$(objpfx)errlist-compat.h: $(objpfx)errlist-compat.c
- sed -n '1p;/ERR_MAX/p' $< > $@T
- -chmod a-w $@T
- mv -f $@T $@
-generated += errlist-compat.c errlist-compat.h
-
-# This will force the generation above to happy if need be.
-$(foreach o,$(object-suffixes) $(object-suffixes:=.d),\
- $(objpfx)errlist$o): $(objpfx)errlist-compat.h
-endif
-
ifeq ($(subdir),login)
sysdep_routines += setutxent getutxent endutxent getutxid getutxline \
pututxline utmpxname updwtmpx getutmpx getutmp
diff --git a/sysdeps/gnu/errlist-compat.awk b/sysdeps/gnu/errlist-compat.awk
deleted file mode 100644
index 07334c63d8..0000000000
--- a/sysdeps/gnu/errlist-compat.awk
+++ /dev/null
@@ -1,133 +0,0 @@
-# awk script to generate errlist-compat.c
-# Copyright (C) 2002-2020 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, see
-# <https://www.gnu.org/licenses/>.
-
-#
-# 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.
-#
-
-# These two rules catch the Versions file contents.
-NF == 2 && $2 == "{" { last_version = $1; next }
-$1 == "#errlist-compat" {
- # Don't process any further Versions files
- ARGC = ARGIND + 1;
- cnt = $2 + 0;
- if (cnt < 80) {
- print "*** this line seems bogus:", $0 > "/dev/stderr";
- exit 1;
- }
- version[pos + 0] = cnt SUBSEP last_version;
- pos++;
- if (cnt < highest) {
- printf "*** %s #errlist-compat counts are not sorted\n", ARGV[ARGIND];
- exit 1;
- }
- if (cnt > highest)
- highest = cnt;
- highest_version = last_version;
- next;
-}
-
-END {
- if (! highest_version) {
- print "/* No sys_errlist/sys_nerr symbols defined on this platform. */";
- exit 0;
- }
-
- count = maxerr + 1;
-
- if (highest < count) {
- printf "*** errlist.c count %d vs Versions sys_errlist@%s count %d\n", \
- count, highest_version, highest > "/dev/stderr";
- exit 1;
- }
-
- lastv = "";
- for (n = 0; n < pos; ++n) {
- split(version[n], t, SUBSEP)
- v = t[2];
- gsub(/[^A-Z0-9_]/, "_", v);
- if (lastv != "")
- compat[lastv] = v;
- lastv = v;
- vcount[v] = t[1];
- }
-
- print "/* This file was generated by errlist-compat.awk; DO NOT EDIT! */\n";
- print "#include <shlib-compat.h>\n";
-
- if (highest > count) {
- printf "*** errlist.c count %d inflated to %s count %d (old errno.h?)\n", \
- count, highest_version, highest > "/dev/stderr";
- printf "#define ERR_MAX %d\n\n", highest - 1;
- }
-
- # same regardless of awk's ordering of the associative array.
- num_compat_elems = asorti(compat, compat_indices)
- for (i = 1; i <= num_compat_elems; i++) {
- old = compat_indices[i]
- new = compat[old];
- n = vcount[old];
- printf "#if SHLIB_COMPAT (libc, %s, %s)\n", old, new;
- printf "# include <bits/wordsize.h>\n";
- printf "extern const char *const __sys_errlist_%s[NERR];\n", old;
- printf "const int __sys_nerr_%s = %d;\n", old, n;
- printf "declare_symbol_alias (__sys_errlist_%s, _sys_errlist_internal,", \
- old;
- printf " object, __WORDSIZE/8*%d)\n", 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[NERR];\n", old;
- printf "extern const int __sys_nerr_%s;\n", old;
- printf "declare_symbol_alias (___sys_errlist_%s, _sys_errlist_internal,", \
- old;
- printf " object, __WORDSIZE/8*%d)\n", n;
- 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[NERR];\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\
-extern const char *const sys_errlist[NERR];\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;
-
- print "\n\
-link_warning (sys_errlist, \"\
-`sys_errlist' is deprecated; use `strerror' or `strerror_r' instead\")\n\
-link_warning (sys_nerr, \"\
-`sys_nerr' is deprecated; use `strerror' or `strerror_r' instead\")";
-}
diff --git a/sysdeps/gnu/errlist.awk b/sysdeps/gnu/errlist.awk
deleted file mode 100644
index 09f80f5b44..0000000000
--- a/sysdeps/gnu/errlist.awk
+++ /dev/null
@@ -1,110 +0,0 @@
-# Copyright (C) 1991-2020 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, see
-# <https://www.gnu.org/licenses/>.
-
-# errno.texi contains lines like:
-# @deftypevr Macro int ENOSYS
-# @errno{ENOSYS, 78, Function not implemented}
-# Descriptive paragraph...
-# @end deftypevr
-
-BEGIN {
-
- # Here we list the E* names that might be duplicate names for the
- # same integer value on some systems. This causes the code below
- # to generate ``#if defined (ALIAS) && ALIAS != ORIGINAL'' in the code,
- # so the output does not presume that these are in fact aliases.
- # We list here all the known potential cases on any system,
- # so that the C source we produce will do the right thing based
- # on the actual #define'd values it's compiled with.
- alias["EWOULDBLOCK"]= "EAGAIN";
- alias["EDEADLOCK"] = "EDEADLK";
- alias["ENOTSUP"] = "EOPNOTSUPP";
-
- print "/* This file is generated from errno.texi by errlist.awk. */"
- print "";
- print "#include <errno.h>";
- print "#include <libintl.h>";
- print "";
- print "#ifndef ERR_REMAP";
- print "# define ERR_REMAP(n) n";
- print "#endif";
- print "";
-
- print "#if !defined EMIT_ERR_MAX && !defined ERRLIST_NO_COMPAT";
- print "# include <errlist-compat.h>";
- print "#endif";
- print "#ifdef ERR_MAX";
- print "# define ERRLIST_SIZE ERR_MAX + 1";
- print "#else"
- print "# define ERR_MAX 0";
- print "# define ERRLIST_SIZE";
- print "#endif";
-
- print "const char *const _sys_errlist_internal[ERRLIST_SIZE] =";
- print " {";
- print " [0] = N_(\"Success\"),"
- }
-
-/^@errno\{/ \
- {
- etext = $3;
- for (i = 4; i <= NF; ++i)
- etext = etext " " $i;
- etext = substr(etext, 1, length(etext)-1)
- e = substr($1, 8, length($1)-8)
- errno = substr($2, 1, length($2)-1) + 0
- if (alias[e])
- printf "#if defined (%s) && %s != %s\n", e, e, alias[e];
- else
- printf "#ifdef %s\n", e;
- errnoh = 4;
- desc="";
- next;
- }
-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;
- }
-errnoh == 4 \
- {
- # This magic tag in C comments gets them copied into libc.pot.
- desc = desc "\nTRANS" ($0 != "" ? " " : "") $0; next
- }
-END {
- print " };";
- print "";
- print "#define NERR \\";
- print " (sizeof _sys_errlist_internal / sizeof _sys_errlist_internal [0])";
- print "const int _sys_nerr_internal = NERR;"
- print "";
- print "#if IS_IN (libc) && !defined ERRLIST_NO_COMPAT";
- print "# include <errlist-compat.c>";
- print "#endif";
- print "";
- print "#ifdef EMIT_ERR_MAX";
- print "void dummy (void)"
- print "{ asm volatile (\" @@@ %0 @@@ \" : : \"i\" (ERR_REMAP (ERR_MAX))); }"
- print "#endif";
-}
diff --git a/sysdeps/gnu/errlist.c b/sysdeps/gnu/errlist.c
deleted file mode 100644
index 77577bf3e1..0000000000
--- a/sysdeps/gnu/errlist.c
+++ /dev/null
@@ -1,1495 +0,0 @@
-/* This file is generated from errno.texi by errlist.awk. */
-
-#include <errno.h>
-#include <libintl.h>
-
-#ifndef ERR_REMAP
-# define ERR_REMAP(n) n
-#endif
-
-#if !defined EMIT_ERR_MAX && !defined ERRLIST_NO_COMPAT
-# include <errlist-compat.h>
-#endif
-#ifdef ERR_MAX
-# define ERRLIST_SIZE ERR_MAX + 1
-#else
-# define ERR_MAX 0
-# define ERRLIST_SIZE
-#endif
-const char *const _sys_errlist_internal[ERRLIST_SIZE] =
- {
- [0] = N_("Success"),
-#ifdef EPERM
-/*
-TRANS 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
-/*
-TRANS 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
-/*
-TRANS An asynchronous signal occurred and prevented
-TRANS completion of the call. When this happens, you should try the call
-TRANS again.
-TRANS
-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 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
-/*
-TRANS The system tried to use the device
-TRANS represented by a file you specified, and it couldn't find the device.
-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
-/*
-TRANS Used when the arguments passed to a new program
-TRANS being executed with one of the @code{exec} functions (@pxref{Executing a
-TRANS File}) occupy too much memory space. This condition never arises on
-TRANS @gnuhurdsystems{}. */
- [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
-/*
-TRANS 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
-/*
-TRANS 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
-/*
-TRANS Allocating a system resource would have resulted in a
-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 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 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 An invalid pointer was detected.
-TRANS On @gnuhurdsystems{}, 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
-/*
-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
-/*
-TRANS 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 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
-/*
-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 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 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
-/*
-TRANS The current process has too many files open and can't open any more.
-TRANS Duplicate descriptors do count toward this limit.
-TRANS
-TRANS In BSD and GNU, the number of open files is controlled by a resource
-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
-/*
-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 on @gnuhurdsystems{}. */
- [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
-/*
-TRANS An attempt to execute a file that is currently open for writing, or
-TRANS write to a file that is currently being executed. Often using a
-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 on @gnuhurdsystems{}; 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 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 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
-/*
-TRANS 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
-/*
-TRANS There is no process reading from the other end of a pipe.
-TRANS Every library function that returns this error code also generates a
-TRANS @code{SIGPIPE} signal; this signal terminates the program if not handled
-TRANS or blocked. Thus, your program will never actually see @code{EPIPE}
-TRANS unless it has handled or blocked @code{SIGPIPE}. */
- [ERR_REMAP (EPIPE)] = N_("Broken pipe"),
-# if EPIPE > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EPIPE
-# endif
-#endif
-#ifdef EDOM
-/*
-TRANS Used by mathematical functions when an argument value does
-TRANS not fall into the domain over which the function is defined. */
- [ERR_REMAP (EDOM)] = N_("Numerical argument out of domain"),
-# if EDOM > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EDOM
-# endif
-#endif
-#ifdef ERANGE
-/*
-TRANS Used by mathematical functions when the result value is
-TRANS not representable because of overflow or underflow. */
- [ERR_REMAP (ERANGE)] = N_("Numerical result out of range"),
-# if ERANGE > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ERANGE
-# endif
-#endif
-#ifdef EAGAIN
-/*
-TRANS The call might work if you try again
-TRANS later. The macro @code{EWOULDBLOCK} is another name for @code{EAGAIN};
-TRANS they are always the same in @theglibc{}.
-TRANS
-TRANS This error can happen in a few different situations:
-TRANS
-TRANS @itemize @bullet
-TRANS @item
-TRANS An operation that would block was attempted on an object that has
-TRANS non-blocking mode selected. Trying the same operation again will block
-TRANS until some external condition makes it possible to read, write, or
-TRANS connect (whatever the operation). You can use @code{select} to find out
-TRANS when the operation will be possible; @pxref{Waiting for I/O}.
-TRANS
-TRANS @strong{Portability Note:} In many older Unix systems, this condition
-TRANS was indicated by @code{EWOULDBLOCK}, which was a distinct error code
-TRANS different from @code{EAGAIN}. To make your program portable, you should
-TRANS check for both codes and treat them the same.
-TRANS
-TRANS @item
-TRANS A temporary resource shortage made an operation impossible. @code{fork}
-TRANS can return this error. It indicates that the shortage is expected to
-TRANS pass, so your program can try the call again later and it may succeed.
-TRANS It is probably a good idea to delay for a few seconds before trying it
-TRANS again, to allow time for other processes to release scarce resources.
-TRANS Such shortages are usually fairly serious and affect the whole system,
-TRANS so usually an interactive program should report the error to the user
-TRANS and return to its command loop.
-TRANS @end itemize */
- [ERR_REMAP (EAGAIN)] = N_("Resource temporarily unavailable"),
-# if EAGAIN > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EAGAIN
-# endif
-#endif
-#if defined (EWOULDBLOCK) && EWOULDBLOCK != EAGAIN
-/*
-TRANS In @theglibc{}, this is another name for @code{EAGAIN} (above).
-TRANS The values are always the same, on every operating system.
-TRANS
-TRANS C libraries in many older Unix systems have @code{EWOULDBLOCK} as a
-TRANS separate error code. */
- [ERR_REMAP (EWOULDBLOCK)] = N_("Operation would block"),
-# if EWOULDBLOCK > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EWOULDBLOCK
-# endif
-#endif
-#ifdef EINPROGRESS
-/*
-TRANS An operation that cannot complete immediately was initiated on an object
-TRANS that has non-blocking mode selected. Some functions that must always
-TRANS block (such as @code{connect}; @pxref{Connecting}) never return
-TRANS @code{EAGAIN}. Instead, they return @code{EINPROGRESS} to indicate that
-TRANS the operation has begun and will take some time. Attempts to manipulate
-TRANS the object before the call completes return @code{EALREADY}. You can
-TRANS use the @code{select} function to find out when the pending operation
-TRANS has completed; @pxref{Waiting for I/O}. */
- [ERR_REMAP (EINPROGRESS)] = N_("Operation now in progress"),
-# if EINPROGRESS > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EINPROGRESS
-# endif
-#endif
-#ifdef EALREADY
-/*
-TRANS An operation is already in progress on an object that has non-blocking
-TRANS mode selected. */
- [ERR_REMAP (EALREADY)] = N_("Operation already in progress"),
-# if EALREADY > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EALREADY
-# endif
-#endif
-#ifdef ENOTSOCK
-/*
-TRANS A file that isn't a socket was specified when a socket is required. */
- [ERR_REMAP (ENOTSOCK)] = N_("Socket operation on non-socket"),
-# if ENOTSOCK > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENOTSOCK
-# endif
-#endif
-#ifdef EMSGSIZE
-/*
-TRANS The size of a message sent on a socket was larger than the supported
-TRANS maximum size. */
- [ERR_REMAP (EMSGSIZE)] = N_("Message too long"),
-# if EMSGSIZE > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EMSGSIZE
-# endif
-#endif
-#ifdef EPROTOTYPE
-/*
-TRANS The socket type does not support the requested communications protocol. */
- [ERR_REMAP (EPROTOTYPE)] = N_("Protocol wrong type for socket"),
-# if EPROTOTYPE > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EPROTOTYPE
-# endif
-#endif
-#ifdef ENOPROTOOPT
-/*
-TRANS You specified a socket option that doesn't make sense for the
-TRANS particular protocol being used by the socket. @xref{Socket Options}. */
- [ERR_REMAP (ENOPROTOOPT)] = N_("Protocol not available"),
-# if ENOPROTOOPT > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENOPROTOOPT
-# endif
-#endif
-#ifdef EPROTONOSUPPORT
-/*
-TRANS The socket domain does not support the requested communications protocol
-TRANS (perhaps because the requested protocol is completely invalid).
-TRANS @xref{Creating a Socket}. */
- [ERR_REMAP (EPROTONOSUPPORT)] = N_("Protocol not supported"),
-# if EPROTONOSUPPORT > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EPROTONOSUPPORT
-# endif
-#endif
-#ifdef ESOCKTNOSUPPORT
-/*
-TRANS The socket type is not supported. */
- [ERR_REMAP (ESOCKTNOSUPPORT)] = N_("Socket type not supported"),
-# if ESOCKTNOSUPPORT > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ESOCKTNOSUPPORT
-# endif
-#endif
-#ifdef EOPNOTSUPP
-/*
-TRANS The operation you requested is not supported. Some socket functions
-TRANS don't make sense for all types of sockets, and others may not be
-TRANS implemented for all communications protocols. On @gnuhurdsystems{}, this
-TRANS error can happen for many calls when the object does not support the
-TRANS particular operation; it is a generic indication that the server knows
-TRANS nothing to do for that call. */
- [ERR_REMAP (EOPNOTSUPP)] = N_("Operation not supported"),
-# if EOPNOTSUPP > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EOPNOTSUPP
-# endif
-#endif
-#ifdef EPFNOSUPPORT
-/*
-TRANS The socket communications protocol family you requested is not supported. */
- [ERR_REMAP (EPFNOSUPPORT)] = N_("Protocol family not supported"),
-# if EPFNOSUPPORT > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EPFNOSUPPORT
-# endif
-#endif
-#ifdef EAFNOSUPPORT
-/*
-TRANS The address family specified for a socket is not supported; it is
-TRANS inconsistent with the protocol being used on the socket. @xref{Sockets}. */
- [ERR_REMAP (EAFNOSUPPORT)] = N_("Address family not supported by protocol"),
-# if EAFNOSUPPORT > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EAFNOSUPPORT
-# endif
-#endif
-#ifdef EADDRINUSE
-/*
-TRANS The requested socket address is already in use. @xref{Socket Addresses}. */
- [ERR_REMAP (EADDRINUSE)] = N_("Address already in use"),
-# if EADDRINUSE > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EADDRINUSE
-# endif
-#endif
-#ifdef EADDRNOTAVAIL
-/*
-TRANS The requested socket address is not available; for example, you tried
-TRANS to give a socket a name that doesn't match the local host name.
-TRANS @xref{Socket Addresses}. */
- [ERR_REMAP (EADDRNOTAVAIL)] = N_("Cannot assign requested address"),
-# if EADDRNOTAVAIL > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EADDRNOTAVAIL
-# endif
-#endif
-#ifdef ENETDOWN
-/*
-TRANS A socket operation failed because the network was down. */
- [ERR_REMAP (ENETDOWN)] = N_("Network is down"),
-# if ENETDOWN > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENETDOWN
-# endif
-#endif
-#ifdef ENETUNREACH
-/*
-TRANS A socket operation failed because the subnet containing the remote host
-TRANS was unreachable. */
- [ERR_REMAP (ENETUNREACH)] = N_("Network is unreachable"),
-# if ENETUNREACH > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENETUNREACH
-# endif
-#endif
-#ifdef ENETRESET
-/*
-TRANS A network connection was reset because the remote host crashed. */
- [ERR_REMAP (ENETRESET)] = N_("Network dropped connection on reset"),
-# if ENETRESET > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENETRESET
-# endif
-#endif
-#ifdef ECONNABORTED
-/*
-TRANS A network connection was aborted locally. */
- [ERR_REMAP (ECONNABORTED)] = N_("Software caused connection abort"),
-# if ECONNABORTED > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ECONNABORTED
-# endif
-#endif
-#ifdef ECONNRESET
-/*
-TRANS A network connection was closed for reasons outside the control of the
-TRANS local host, such as by the remote machine rebooting or an unrecoverable
-TRANS protocol violation. */
- [ERR_REMAP (ECONNRESET)] = N_("Connection reset by peer"),
-# if ECONNRESET > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ECONNRESET
-# endif
-#endif
-#ifdef ENOBUFS
-/*
-TRANS The kernel's buffers for I/O operations are all in use. In GNU, this
-TRANS error is always synonymous with @code{ENOMEM}; you may get one or the
-TRANS other from network operations. */
- [ERR_REMAP (ENOBUFS)] = N_("No buffer space available"),
-# if ENOBUFS > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENOBUFS
-# endif
-#endif
-#ifdef EISCONN
-/*
-TRANS You tried to connect a socket that is already connected.
-TRANS @xref{Connecting}. */
- [ERR_REMAP (EISCONN)] = N_("Transport endpoint is already connected"),
-# if EISCONN > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EISCONN
-# endif
-#endif
-#ifdef ENOTCONN
-/*
-TRANS The socket is not connected to anything. You get this error when you
-TRANS try to transmit data over a socket, without first specifying a
-TRANS destination for the data. For a connectionless socket (for datagram
-TRANS protocols, such as UDP), you get @code{EDESTADDRREQ} instead. */
- [ERR_REMAP (ENOTCONN)] = N_("Transport endpoint is not connected"),
-# if ENOTCONN > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENOTCONN
-# endif
-#endif
-#ifdef EDESTADDRREQ
-/*
-TRANS No default destination address was set for the socket. You get this
-TRANS error when you try to transmit data over a connectionless socket,
-TRANS without first specifying a destination for the data with @code{connect}. */
- [ERR_REMAP (EDESTADDRREQ)] = N_("Destination address required"),
-# if EDESTADDRREQ > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EDESTADDRREQ
-# endif
-#endif
-#ifdef ESHUTDOWN
-/*
-TRANS The socket has already been shut down. */
- [ERR_REMAP (ESHUTDOWN)] = N_("Cannot send after transport endpoint shutdown"),
-# if ESHUTDOWN > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ESHUTDOWN
-# endif
-#endif
-#ifdef ETOOMANYREFS
-/* */
- [ERR_REMAP (ETOOMANYREFS)] = N_("Too many references: cannot splice"),
-# if ETOOMANYREFS > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ETOOMANYREFS
-# endif
-#endif
-#ifdef ETIMEDOUT
-/*
-TRANS A socket operation with a specified timeout received no response during
-TRANS the timeout period. */
- [ERR_REMAP (ETIMEDOUT)] = N_("Connection timed out"),
-# if ETIMEDOUT > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ETIMEDOUT
-# endif
-#endif
-#ifdef ECONNREFUSED
-/*
-TRANS A remote host refused to allow the network connection (typically because
-TRANS it is not running the requested service). */
- [ERR_REMAP (ECONNREFUSED)] = N_("Connection refused"),
-# if ECONNREFUSED > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ECONNREFUSED
-# endif
-#endif
-#ifdef ELOOP
-/*
-TRANS Too many levels of symbolic links were encountered in looking up a file name.
-TRANS This often indicates a cycle of symbolic links. */
- [ERR_REMAP (ELOOP)] = N_("Too many levels of symbolic links"),
-# if ELOOP > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ELOOP
-# endif
-#endif
-#ifdef ENAMETOOLONG
-/*
-TRANS Filename too long (longer than @code{PATH_MAX}; @pxref{Limits for
-TRANS Files}) or host name too long (in @code{gethostname} or
-TRANS @code{sethostname}; @pxref{Host Identification}). */
- [ERR_REMAP (ENAMETOOLONG)] = N_("File name too long"),
-# if ENAMETOOLONG > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENAMETOOLONG
-# endif
-#endif
-#ifdef EHOSTDOWN
-/*
-TRANS The remote host for a requested network connection is down. */
- [ERR_REMAP (EHOSTDOWN)] = N_("Host is down"),
-# if EHOSTDOWN > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EHOSTDOWN
-# endif
-#endif
-#ifdef EHOSTUNREACH
-/*
-TRANS The remote host for a requested network connection is not reachable. */
- [ERR_REMAP (EHOSTUNREACH)] = N_("No route to host"),
-# if EHOSTUNREACH > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EHOSTUNREACH
-# endif
-#endif
-#ifdef ENOTEMPTY
-/*
-TRANS Directory not empty, where an empty directory was expected. Typically,
-TRANS this error occurs when you are trying to delete a directory. */
- [ERR_REMAP (ENOTEMPTY)] = N_("Directory not empty"),
-# if ENOTEMPTY > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENOTEMPTY
-# endif
-#endif
-#ifdef EPROCLIM
-/*
-TRANS This means that the per-user limit on new process would be exceeded by
-TRANS an attempted @code{fork}. @xref{Limits on Resources}, for details on
-TRANS the @code{RLIMIT_NPROC} limit. */
- [ERR_REMAP (EPROCLIM)] = N_("Too many processes"),
-# if EPROCLIM > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EPROCLIM
-# endif
-#endif
-#ifdef EUSERS
-/*
-TRANS The file quota system is confused because there are too many users.
-TRANS @c This can probably happen in a GNU system when using NFS. */
- [ERR_REMAP (EUSERS)] = N_("Too many users"),
-# if EUSERS > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EUSERS
-# endif
-#endif
-#ifdef EDQUOT
-/*
-TRANS The user's disk quota was exceeded. */
- [ERR_REMAP (EDQUOT)] = N_("Disk quota exceeded"),
-# if EDQUOT > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EDQUOT
-# endif
-#endif
-#ifdef ESTALE
-/*
-TRANS This indicates an internal confusion in the
-TRANS file system which is due to file system rearrangements on the server host
-TRANS for NFS file systems or corruption in other file systems.
-TRANS Repairing this condition usually requires unmounting, possibly repairing
-TRANS and remounting the file system. */
- [ERR_REMAP (ESTALE)] = N_("Stale file handle"),
-# if ESTALE > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ESTALE
-# endif
-#endif
-#ifdef EREMOTE
-/*
-TRANS An attempt was made to NFS-mount a remote file system with a file name that
-TRANS already specifies an NFS-mounted file.
-TRANS (This is an error on some operating systems, but we expect it to work
-TRANS properly on @gnuhurdsystems{}, making this error code impossible.) */
- [ERR_REMAP (EREMOTE)] = N_("Object is remote"),
-# if EREMOTE > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EREMOTE
-# endif
-#endif
-#ifdef EBADRPC
-/* */
- [ERR_REMAP (EBADRPC)] = N_("RPC struct is bad"),
-# if EBADRPC > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EBADRPC
-# endif
-#endif
-#ifdef ERPCMISMATCH
-/* */
- [ERR_REMAP (ERPCMISMATCH)] = N_("RPC version wrong"),
-# if ERPCMISMATCH > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ERPCMISMATCH
-# endif
-#endif
-#ifdef EPROGUNAVAIL
-/* */
- [ERR_REMAP (EPROGUNAVAIL)] = N_("RPC program not available"),
-# if EPROGUNAVAIL > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EPROGUNAVAIL
-# endif
-#endif
-#ifdef EPROGMISMATCH
-/* */
- [ERR_REMAP (EPROGMISMATCH)] = N_("RPC program version wrong"),
-# if EPROGMISMATCH > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EPROGMISMATCH
-# endif
-#endif
-#ifdef EPROCUNAVAIL
-/* */
- [ERR_REMAP (EPROCUNAVAIL)] = N_("RPC bad procedure for program"),
-# if EPROCUNAVAIL > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EPROCUNAVAIL
-# endif
-#endif
-#ifdef ENOLCK
-/*
-TRANS This is used by the file locking facilities; see
-TRANS @ref{File Locks}. This error is never generated by @gnuhurdsystems{}, but
-TRANS it can result from an operation to an NFS server running another
-TRANS operating system. */
- [ERR_REMAP (ENOLCK)] = N_("No locks available"),
-# if ENOLCK > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENOLCK
-# endif
-#endif
-#ifdef EFTYPE
-/*
-TRANS The file was the wrong type for the
-TRANS operation, or a data file had the wrong format.
-TRANS
-TRANS On some systems @code{chmod} returns this error if you try to set the
-TRANS sticky bit on a non-directory file; @pxref{Setting Permissions}. */
- [ERR_REMAP (EFTYPE)] = N_("Inappropriate file type or format"),
-# if EFTYPE > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EFTYPE
-# endif
-#endif
-#ifdef EAUTH
-/* */
- [ERR_REMAP (EAUTH)] = N_("Authentication error"),
-# if EAUTH > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EAUTH
-# endif
-#endif
-#ifdef ENEEDAUTH
-/* */
- [ERR_REMAP (ENEEDAUTH)] = N_("Need authenticator"),
-# if ENEEDAUTH > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENEEDAUTH
-# endif
-#endif
-#ifdef ENOSYS
-/*
-TRANS This indicates that the function called is
-TRANS not implemented at all, either in the C library itself or in the
-TRANS operating system. When you get this error, you can be sure that this
-TRANS particular function will always fail with @code{ENOSYS} unless you
-TRANS install a new version of the C library or the operating system. */
- [ERR_REMAP (ENOSYS)] = N_("Function not implemented"),
-# if ENOSYS > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENOSYS
-# endif
-#endif
-#if defined (ENOTSUP) && ENOTSUP != EOPNOTSUPP
-/*
-TRANS A function returns this error when certain parameter
-TRANS values are valid, but the functionality they request is not available.
-TRANS This can mean that the function does not implement a particular command
-TRANS or option value or flag bit at all. For functions that operate on some
-TRANS object given in a parameter, such as a file descriptor or a port, it
-TRANS might instead mean that only @emph{that specific object} (file
-TRANS descriptor, port, etc.) is unable to support the other parameters given;
-TRANS different file descriptors might support different ranges of parameter
-TRANS values.
-TRANS
-TRANS If the entire function is not available at all in the implementation,
-TRANS it returns @code{ENOSYS} instead. */
- [ERR_REMAP (ENOTSUP)] = N_("Not supported"),
-# if ENOTSUP > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENOTSUP
-# endif
-#endif
-#ifdef EILSEQ
-/*
-TRANS While decoding a multibyte character the function came along an invalid
-TRANS or an incomplete sequence of bytes or the given wide character is invalid. */
- [ERR_REMAP (EILSEQ)] = N_("Invalid or incomplete multibyte or wide character"),
-# if EILSEQ > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EILSEQ
-# endif
-#endif
-#ifdef EBACKGROUND
-/*
-TRANS On @gnuhurdsystems{}, servers supporting the @code{term} protocol return
-TRANS this error for certain operations when the caller is not in the
-TRANS foreground process group of the terminal. Users do not usually see this
-TRANS error because functions such as @code{read} and @code{write} translate
-TRANS it into a @code{SIGTTIN} or @code{SIGTTOU} signal. @xref{Job Control},
-TRANS for information on process groups and these signals. */
- [ERR_REMAP (EBACKGROUND)] = N_("Inappropriate operation for background process"),
-# if EBACKGROUND > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EBACKGROUND
-# endif
-#endif
-#ifdef EDIED
-/*
-TRANS On @gnuhurdsystems{}, opening a file returns this error when the file is
-TRANS translated by a program and the translator program dies while starting
-TRANS up, before it has connected to the file. */
- [ERR_REMAP (EDIED)] = N_("Translator died"),
-# if EDIED > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EDIED
-# endif
-#endif
-#ifdef ED
-/*
-TRANS The experienced user will know what is wrong.
-TRANS @c This error code is a joke. Its perror text is part of the joke.
-TRANS @c Don't change it. */
- [ERR_REMAP (ED)] = N_("?"),
-# if ED > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ED
-# endif
-#endif
-#ifdef EGREGIOUS
-/*
-TRANS You did @strong{what}? */
- [ERR_REMAP (EGREGIOUS)] = N_("You really blew it this time"),
-# if EGREGIOUS > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EGREGIOUS
-# endif
-#endif
-#ifdef EIEIO
-/*
-TRANS Go home and have a glass of warm, dairy-fresh milk.
-TRANS @c Okay. Since you are dying to know, I'll tell you.
-TRANS @c This is a joke, obviously. There is a children's song which begins,
-TRANS @c "Old McDonald had a farm, e-i-e-i-o." Every time I see the (real)
-TRANS @c errno macro EIO, I think about that song. Probably most of my
-TRANS @c compatriots who program on Unix do, too. One of them must have stayed
-TRANS @c up a little too late one night and decided to add it to Hurd or Glibc.
-TRANS @c Whoever did it should be castigated, but it made me laugh.
-TRANS @c --jtobey@channel1.com
-TRANS @c
-TRANS @c "bought the farm" means "died". -jtobey
-TRANS @c
-TRANS @c Translators, please do not translate this litteraly, translate it into
-TRANS @c an idiomatic funny way of saying that the computer died. */
- [ERR_REMAP (EIEIO)] = N_("Computer bought the farm"),
-# if EIEIO > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EIEIO
-# endif
-#endif
-#ifdef EGRATUITOUS
-/*
-TRANS This error code has no purpose. */
- [ERR_REMAP (EGRATUITOUS)] = N_("Gratuitous error"),
-# if EGRATUITOUS > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EGRATUITOUS
-# endif
-#endif
-#ifdef EBADMSG
-/* */
- [ERR_REMAP (EBADMSG)] = N_("Bad message"),
-# if EBADMSG > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EBADMSG
-# endif
-#endif
-#ifdef EIDRM
-/* */
- [ERR_REMAP (EIDRM)] = N_("Identifier removed"),
-# if EIDRM > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EIDRM
-# endif
-#endif
-#ifdef EMULTIHOP
-/* */
- [ERR_REMAP (EMULTIHOP)] = N_("Multihop attempted"),
-# if EMULTIHOP > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EMULTIHOP
-# endif
-#endif
-#ifdef ENODATA
-/* */
- [ERR_REMAP (ENODATA)] = N_("No data available"),
-# if ENODATA > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENODATA
-# endif
-#endif
-#ifdef ENOLINK
-/* */
- [ERR_REMAP (ENOLINK)] = N_("Link has been severed"),
-# if ENOLINK > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENOLINK
-# endif
-#endif
-#ifdef ENOMSG
-/* */
- [ERR_REMAP (ENOMSG)] = N_("No message of desired type"),
-# if ENOMSG > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENOMSG
-# endif
-#endif
-#ifdef ENOSR
-/* */
- [ERR_REMAP (ENOSR)] = N_("Out of streams resources"),
-# if ENOSR > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENOSR
-# endif
-#endif
-#ifdef ENOSTR
-/* */
- [ERR_REMAP (ENOSTR)] = N_("Device not a stream"),
-# if ENOSTR > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENOSTR
-# endif
-#endif
-#ifdef EOVERFLOW
-/* */
- [ERR_REMAP (EOVERFLOW)] = N_("Value too large for defined data type"),
-# if EOVERFLOW > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EOVERFLOW
-# endif
-#endif
-#ifdef EPROTO
-/* */
- [ERR_REMAP (EPROTO)] = N_("Protocol error"),
-# if EPROTO > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EPROTO
-# endif
-#endif
-#ifdef ETIME
-/* */
- [ERR_REMAP (ETIME)] = N_("Timer expired"),
-# if ETIME > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ETIME
-# endif
-#endif
-#ifdef ECANCELED
-/*
-TRANS An asynchronous operation was canceled before it
-TRANS completed. @xref{Asynchronous I/O}. When you call @code{aio_cancel},
-TRANS the normal result is for the operations affected to complete with this
-TRANS error; @pxref{Cancel AIO Operations}. */
- [ERR_REMAP (ECANCELED)] = N_("Operation canceled"),
-# if ECANCELED > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ECANCELED
-# endif
-#endif
-#ifdef EOWNERDEAD
-/* */
- [ERR_REMAP (EOWNERDEAD)] = N_("Owner died"),
-# if EOWNERDEAD > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EOWNERDEAD
-# endif
-#endif
-#ifdef ENOTRECOVERABLE
-/* */
- [ERR_REMAP (ENOTRECOVERABLE)] = N_("State not recoverable"),
-# if ENOTRECOVERABLE > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENOTRECOVERABLE
-# endif
-#endif
-#ifdef ERESTART
-/* */
- [ERR_REMAP (ERESTART)] = N_("Interrupted system call should be restarted"),
-# if ERESTART > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ERESTART
-# endif
-#endif
-#ifdef ECHRNG
-/* */
- [ERR_REMAP (ECHRNG)] = N_("Channel number out of range"),
-# if ECHRNG > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ECHRNG
-# endif
-#endif
-#ifdef EL2NSYNC
-/* */
- [ERR_REMAP (EL2NSYNC)] = N_("Level 2 not synchronized"),
-# if EL2NSYNC > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EL2NSYNC
-# endif
-#endif
-#ifdef EL3HLT
-/* */
- [ERR_REMAP (EL3HLT)] = N_("Level 3 halted"),
-# if EL3HLT > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EL3HLT
-# endif
-#endif
-#ifdef EL3RST
-/* */
- [ERR_REMAP (EL3RST)] = N_("Level 3 reset"),
-# if EL3RST > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EL3RST
-# endif
-#endif
-#ifdef ELNRNG
-/* */
- [ERR_REMAP (ELNRNG)] = N_("Link number out of range"),
-# if ELNRNG > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ELNRNG
-# endif
-#endif
-#ifdef EUNATCH
-/* */
- [ERR_REMAP (EUNATCH)] = N_("Protocol driver not attached"),
-# if EUNATCH > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EUNATCH
-# endif
-#endif
-#ifdef ENOCSI
-/* */
- [ERR_REMAP (ENOCSI)] = N_("No CSI structure available"),
-# if ENOCSI > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENOCSI
-# endif
-#endif
-#ifdef EL2HLT
-/* */
- [ERR_REMAP (EL2HLT)] = N_("Level 2 halted"),
-# if EL2HLT > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EL2HLT
-# endif
-#endif
-#ifdef EBADE
-/* */
- [ERR_REMAP (EBADE)] = N_("Invalid exchange"),
-# if EBADE > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EBADE
-# endif
-#endif
-#ifdef EBADR
-/* */
- [ERR_REMAP (EBADR)] = N_("Invalid request descriptor"),
-# if EBADR > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EBADR
-# endif
-#endif
-#ifdef EXFULL
-/* */
- [ERR_REMAP (EXFULL)] = N_("Exchange full"),
-# if EXFULL > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EXFULL
-# endif
-#endif
-#ifdef ENOANO
-/* */
- [ERR_REMAP (ENOANO)] = N_("No anode"),
-# if ENOANO > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENOANO
-# endif
-#endif
-#ifdef EBADRQC
-/* */
- [ERR_REMAP (EBADRQC)] = N_("Invalid request code"),
-# if EBADRQC > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EBADRQC
-# endif
-#endif
-#ifdef EBADSLT
-/* */
- [ERR_REMAP (EBADSLT)] = N_("Invalid slot"),
-# if EBADSLT > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EBADSLT
-# endif
-#endif
-#if defined (EDEADLOCK) && EDEADLOCK != EDEADLK
-/* */
- [ERR_REMAP (EDEADLOCK)] = N_("File locking deadlock error"),
-# if EDEADLOCK > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EDEADLOCK
-# endif
-#endif
-#ifdef EBFONT
-/* */
- [ERR_REMAP (EBFONT)] = N_("Bad font file format"),
-# if EBFONT > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EBFONT
-# endif
-#endif
-#ifdef ENONET
-/* */
- [ERR_REMAP (ENONET)] = N_("Machine is not on the network"),
-# if ENONET > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENONET
-# endif
-#endif
-#ifdef ENOPKG
-/* */
- [ERR_REMAP (ENOPKG)] = N_("Package not installed"),
-# if ENOPKG > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENOPKG
-# endif
-#endif
-#ifdef EADV
-/* */
- [ERR_REMAP (EADV)] = N_("Advertise error"),
-# if EADV > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EADV
-# endif
-#endif
-#ifdef ESRMNT
-/* */
- [ERR_REMAP (ESRMNT)] = N_("Srmount error"),
-# if ESRMNT > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ESRMNT
-# endif
-#endif
-#ifdef ECOMM
-/* */
- [ERR_REMAP (ECOMM)] = N_("Communication error on send"),
-# if ECOMM > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ECOMM
-# endif
-#endif
-#ifdef EDOTDOT
-/* */
- [ERR_REMAP (EDOTDOT)] = N_("RFS specific error"),
-# if EDOTDOT > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EDOTDOT
-# endif
-#endif
-#ifdef ENOTUNIQ
-/* */
- [ERR_REMAP (ENOTUNIQ)] = N_("Name not unique on network"),
-# if ENOTUNIQ > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENOTUNIQ
-# endif
-#endif
-#ifdef EBADFD
-/* */
- [ERR_REMAP (EBADFD)] = N_("File descriptor in bad state"),
-# if EBADFD > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EBADFD
-# endif
-#endif
-#ifdef EREMCHG
-/* */
- [ERR_REMAP (EREMCHG)] = N_("Remote address changed"),
-# if EREMCHG > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EREMCHG
-# endif
-#endif
-#ifdef ELIBACC
-/* */
- [ERR_REMAP (ELIBACC)] = N_("Can not access a needed shared library"),
-# if ELIBACC > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ELIBACC
-# endif
-#endif
-#ifdef ELIBBAD
-/* */
- [ERR_REMAP (ELIBBAD)] = N_("Accessing a corrupted shared library"),
-# if ELIBBAD > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ELIBBAD
-# endif
-#endif
-#ifdef ELIBSCN
-/* */
- [ERR_REMAP (ELIBSCN)] = N_(".lib section in a.out corrupted"),
-# if ELIBSCN > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ELIBSCN
-# endif
-#endif
-#ifdef ELIBMAX
-/* */
- [ERR_REMAP (ELIBMAX)] = N_("Attempting to link in too many shared libraries"),
-# if ELIBMAX > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ELIBMAX
-# endif
-#endif
-#ifdef ELIBEXEC
-/* */
- [ERR_REMAP (ELIBEXEC)] = N_("Cannot exec a shared library directly"),
-# if ELIBEXEC > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ELIBEXEC
-# endif
-#endif
-#ifdef ESTRPIPE
-/* */
- [ERR_REMAP (ESTRPIPE)] = N_("Streams pipe error"),
-# if ESTRPIPE > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ESTRPIPE
-# endif
-#endif
-#ifdef EUCLEAN
-/* */
- [ERR_REMAP (EUCLEAN)] = N_("Structure needs cleaning"),
-# if EUCLEAN > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EUCLEAN
-# endif
-#endif
-#ifdef ENOTNAM
-/* */
- [ERR_REMAP (ENOTNAM)] = N_("Not a XENIX named type file"),
-# if ENOTNAM > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENOTNAM
-# endif
-#endif
-#ifdef ENAVAIL
-/* */
- [ERR_REMAP (ENAVAIL)] = N_("No XENIX semaphores available"),
-# if ENAVAIL > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENAVAIL
-# endif
-#endif
-#ifdef EISNAM
-/* */
- [ERR_REMAP (EISNAM)] = N_("Is a named type file"),
-# if EISNAM > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EISNAM
-# endif
-#endif
-#ifdef EREMOTEIO
-/* */
- [ERR_REMAP (EREMOTEIO)] = N_("Remote I/O error"),
-# if EREMOTEIO > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EREMOTEIO
-# endif
-#endif
-#ifdef ENOMEDIUM
-/* */
- [ERR_REMAP (ENOMEDIUM)] = N_("No medium found"),
-# if ENOMEDIUM > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENOMEDIUM
-# endif
-#endif
-#ifdef EMEDIUMTYPE
-/* */
- [ERR_REMAP (EMEDIUMTYPE)] = N_("Wrong medium type"),
-# if EMEDIUMTYPE > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EMEDIUMTYPE
-# endif
-#endif
-#ifdef ENOKEY
-/* */
- [ERR_REMAP (ENOKEY)] = N_("Required key not available"),
-# if ENOKEY > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ENOKEY
-# endif
-#endif
-#ifdef EKEYEXPIRED
-/* */
- [ERR_REMAP (EKEYEXPIRED)] = N_("Key has expired"),
-# if EKEYEXPIRED > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EKEYEXPIRED
-# endif
-#endif
-#ifdef EKEYREVOKED
-/* */
- [ERR_REMAP (EKEYREVOKED)] = N_("Key has been revoked"),
-# if EKEYREVOKED > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EKEYREVOKED
-# endif
-#endif
-#ifdef EKEYREJECTED
-/* */
- [ERR_REMAP (EKEYREJECTED)] = N_("Key was rejected by service"),
-# if EKEYREJECTED > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EKEYREJECTED
-# endif
-#endif
-#ifdef ERFKILL
-/* */
- [ERR_REMAP (ERFKILL)] = N_("Operation not possible due to RF-kill"),
-# if ERFKILL > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX ERFKILL
-# endif
-#endif
-#ifdef EHWPOISON
-/* */
- [ERR_REMAP (EHWPOISON)] = N_("Memory page has hardware error"),
-# if EHWPOISON > ERR_MAX
-# undef ERR_MAX
-# define ERR_MAX EHWPOISON
-# endif
-#endif
- };
-
-#define NERR \
- (sizeof _sys_errlist_internal / sizeof _sys_errlist_internal [0])
-const int _sys_nerr_internal = NERR;
-
-#if IS_IN (libc) && !defined ERRLIST_NO_COMPAT
-# include <errlist-compat.c>
-#endif
-
-#ifdef EMIT_ERR_MAX
-void dummy (void)
-{ asm volatile (" @@@ %0 @@@ " : : "i" (ERR_REMAP (ERR_MAX))); }
-#endif
diff --git a/sysdeps/gnu/errlist.h b/sysdeps/gnu/errlist.h
new file mode 100644
index 0000000000..5d11ed723d
--- /dev/null
+++ b/sysdeps/gnu/errlist.h
@@ -0,0 +1,799 @@
+#ifndef ERR_MAP
+#define ERR_MAP(value) value
+#endif
+_S(ERR_MAP(0), N_("Success"))
+#ifdef EPERM
+/*
+TRANS Only the owner of the file (or other resource)
+TRANS or processes with special privileges can perform the operation. */
+_S(ERR_MAP(EPERM), N_("Operation not permitted"))
+#endif
+#ifdef ENOENT
+/*
+TRANS 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. */
+_S(ERR_MAP(ENOENT), N_("No such file or directory"))
+#endif
+#ifdef ESRCH
+/*
+TRANS No process matches the specified process ID. */
+_S(ERR_MAP(ESRCH), N_("No such process"))
+#endif
+#ifdef EINTR
+/*
+TRANS An asynchronous signal occurred and prevented
+TRANS completion of the call. When this happens, you should try the call
+TRANS again.
+TRANS
+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}. */
+_S(ERR_MAP(EINTR), N_("Interrupted system call"))
+#endif
+#ifdef EIO
+/*
+TRANS Usually used for physical read or write errors. */
+_S(ERR_MAP(EIO), N_("Input/output error"))
+#endif
+#ifdef ENXIO
+/*
+TRANS The system tried to use the device
+TRANS represented by a file you specified, and it couldn't find the device.
+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. */
+_S(ERR_MAP(ENXIO), N_("No such device or address"))
+#endif
+#ifdef E2BIG
+/*
+TRANS Used when the arguments passed to a new program
+TRANS being executed with one of the @code{exec} functions (@pxref{Executing a
+TRANS File}) occupy too much memory space. This condition never arises on
+TRANS @gnuhurdsystems{}. */
+_S(ERR_MAP(E2BIG), N_("Argument list too long"))
+#endif
+#ifdef ENOEXEC
+/*
+TRANS Invalid executable file format. This condition is detected by the
+TRANS @code{exec} functions; see @ref{Executing a File}. */
+_S(ERR_MAP(ENOEXEC), N_("Exec format error"))
+#endif
+#ifdef EBADF
+/*
+TRANS 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). */
+_S(ERR_MAP(EBADF), N_("Bad file descriptor"))
+#endif
+#ifdef ECHILD
+/*
+TRANS This error happens on operations that are
+TRANS supposed to manipulate child processes, when there aren't any processes
+TRANS to manipulate. */
+_S(ERR_MAP(ECHILD), N_("No child processes"))
+#endif
+#ifdef EDEADLK
+/*
+TRANS Allocating a system resource would have resulted in a
+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. */
+_S(ERR_MAP(EDEADLK), N_("Resource deadlock avoided"))
+#endif
+#ifdef ENOMEM
+/*
+TRANS The system cannot allocate more virtual memory
+TRANS because its capacity is full. */
+_S(ERR_MAP(ENOMEM), N_("Cannot allocate memory"))
+#endif
+#ifdef EACCES
+/*
+TRANS The file permissions do not allow the attempted operation. */
+_S(ERR_MAP(EACCES), N_("Permission denied"))
+#endif
+#ifdef EFAULT
+/*
+TRANS An invalid pointer was detected.
+TRANS On @gnuhurdsystems{}, this error never happens; you get a signal instead. */
+_S(ERR_MAP(EFAULT), N_("Bad address"))
+#endif
+#ifdef ENOTBLK
+/*
+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. */
+_S(ERR_MAP(ENOTBLK), N_("Block device required"))
+#endif
+#ifdef EBUSY
+/*
+TRANS 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. */
+_S(ERR_MAP(EBUSY), N_("Device or resource busy"))
+#endif
+#ifdef EEXIST
+/*
+TRANS An existing file was specified in a context where it only
+TRANS makes sense to specify a new file. */
+_S(ERR_MAP(EEXIST), N_("File exists"))
+#endif
+#ifdef EXDEV
+/*
+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}). */
+_S(ERR_MAP(EXDEV), N_("Invalid cross-device link"))
+#endif
+#ifdef ENODEV
+/*
+TRANS The wrong type of device was given to a function that expects a
+TRANS particular sort of device. */
+_S(ERR_MAP(ENODEV), N_("No such device"))
+#endif
+#ifdef ENOTDIR
+/*
+TRANS A file that isn't a directory was specified when a directory is required. */
+_S(ERR_MAP(ENOTDIR), N_("Not a directory"))
+#endif
+#ifdef EISDIR
+/*
+TRANS You cannot open a directory for writing,
+TRANS or create or remove hard links to it. */
+_S(ERR_MAP(EISDIR), N_("Is a directory"))
+#endif
+#ifdef EINVAL
+/*
+TRANS This is used to indicate various kinds of problems
+TRANS with passing the wrong argument to a library function. */
+_S(ERR_MAP(EINVAL), N_("Invalid argument"))
+#endif
+#ifdef EMFILE
+/*
+TRANS The current process has too many files open and can't open any more.
+TRANS Duplicate descriptors do count toward this limit.
+TRANS
+TRANS In BSD and GNU, the number of open files is controlled by a resource
+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}. */
+_S(ERR_MAP(EMFILE), N_("Too many open files"))
+#endif
+#ifdef ENFILE
+/*
+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 on @gnuhurdsystems{}. */
+_S(ERR_MAP(ENFILE), N_("Too many open files in system"))
+#endif
+#ifdef ENOTTY
+/*
+TRANS Inappropriate I/O control operation, such as trying to set terminal
+TRANS modes on an ordinary file. */
+_S(ERR_MAP(ENOTTY), N_("Inappropriate ioctl for device"))
+#endif
+#ifdef ETXTBSY
+/*
+TRANS An attempt to execute a file that is currently open for writing, or
+TRANS write to a file that is currently being executed. Often using a
+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 on @gnuhurdsystems{}; the text is copied as necessary. */
+_S(ERR_MAP(ETXTBSY), N_("Text file busy"))
+#endif
+#ifdef EFBIG
+/*
+TRANS The size of a file would be larger than allowed by the system. */
+_S(ERR_MAP(EFBIG), N_("File too large"))
+#endif
+#ifdef ENOSPC
+/*
+TRANS Write operation on a file failed because the
+TRANS disk is full. */
+_S(ERR_MAP(ENOSPC), N_("No space left on device"))
+#endif
+#ifdef ESPIPE
+/*
+TRANS Invalid seek operation (such as on a pipe). */
+_S(ERR_MAP(ESPIPE), N_("Illegal seek"))
+#endif
+#ifdef EROFS
+/*
+TRANS An attempt was made to modify something on a read-only file system. */
+_S(ERR_MAP(EROFS), N_("Read-only file system"))
+#endif
+#ifdef EMLINK
+/*
+TRANS 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}). */
+_S(ERR_MAP(EMLINK), N_("Too many links"))
+#endif
+#ifdef EPIPE
+/*
+TRANS There is no process reading from the other end of a pipe.
+TRANS Every library function that returns this error code also generates a
+TRANS @code{SIGPIPE} signal; this signal terminates the program if not handled
+TRANS or blocked. Thus, your program will never actually see @code{EPIPE}
+TRANS unless it has handled or blocked @code{SIGPIPE}. */
+_S(ERR_MAP(EPIPE), N_("Broken pipe"))
+#endif
+#ifdef EDOM
+/*
+TRANS Used by mathematical functions when an argument value does
+TRANS not fall into the domain over which the function is defined. */
+_S(ERR_MAP(EDOM), N_("Numerical argument out of domain"))
+#endif
+#ifdef ERANGE
+/*
+TRANS Used by mathematical functions when the result value is
+TRANS not representable because of overflow or underflow. */
+_S(ERR_MAP(ERANGE), N_("Numerical result out of range"))
+#endif
+#ifdef EAGAIN
+/*
+TRANS The call might work if you try again
+TRANS later. The macro @code{EWOULDBLOCK} is another name for @code{EAGAIN};
+TRANS they are always the same in @theglibc{}.
+TRANS
+TRANS This error can happen in a few different situations:
+TRANS
+TRANS @itemize @bullet
+TRANS @item
+TRANS An operation that would block was attempted on an object that has
+TRANS non-blocking mode selected. Trying the same operation again will block
+TRANS until some external condition makes it possible to read, write, or
+TRANS connect (whatever the operation). You can use @code{select} to find out
+TRANS when the operation will be possible; @pxref{Waiting for I/O}.
+TRANS
+TRANS @strong{Portability Note:} In many older Unix systems, this condition
+TRANS was indicated by @code{EWOULDBLOCK}, which was a distinct error code
+TRANS different from @code{EAGAIN}. To make your program portable, you should
+TRANS check for both codes and treat them the same.
+TRANS
+TRANS @item
+TRANS A temporary resource shortage made an operation impossible. @code{fork}
+TRANS can return this error. It indicates that the shortage is expected to
+TRANS pass, so your program can try the call again later and it may succeed.
+TRANS It is probably a good idea to delay for a few seconds before trying it
+TRANS again, to allow time for other processes to release scarce resources.
+TRANS Such shortages are usually fairly serious and affect the whole system,
+TRANS so usually an interactive program should report the error to the user
+TRANS and return to its command loop.
+TRANS @end itemize */
+_S(ERR_MAP(EAGAIN), N_("Resource temporarily unavailable"))
+#endif
+#ifdef EINPROGRESS
+/*
+TRANS An operation that cannot complete immediately was initiated on an object
+TRANS that has non-blocking mode selected. Some functions that must always
+TRANS block (such as @code{connect}; @pxref{Connecting}) never return
+TRANS @code{EAGAIN}. Instead, they return @code{EINPROGRESS} to indicate that
+TRANS the operation has begun and will take some time. Attempts to manipulate
+TRANS the object before the call completes return @code{EALREADY}. You can
+TRANS use the @code{select} function to find out when the pending operation
+TRANS has completed; @pxref{Waiting for I/O}. */
+_S(ERR_MAP(EINPROGRESS), N_("Operation now in progress"))
+#endif
+#ifdef EALREADY
+/*
+TRANS An operation is already in progress on an object that has non-blocking
+TRANS mode selected. */
+_S(ERR_MAP(EALREADY), N_("Operation already in progress"))
+#endif
+#ifdef ENOTSOCK
+/*
+TRANS A file that isn't a socket was specified when a socket is required. */
+_S(ERR_MAP(ENOTSOCK), N_("Socket operation on non-socket"))
+#endif
+#ifdef EMSGSIZE
+/*
+TRANS The size of a message sent on a socket was larger than the supported
+TRANS maximum size. */
+_S(ERR_MAP(EMSGSIZE), N_("Message too long"))
+#endif
+#ifdef EPROTOTYPE
+/*
+TRANS The socket type does not support the requested communications protocol. */
+_S(ERR_MAP(EPROTOTYPE), N_("Protocol wrong type for socket"))
+#endif
+#ifdef ENOPROTOOPT
+/*
+TRANS You specified a socket option that doesn't make sense for the
+TRANS particular protocol being used by the socket. @xref{Socket Options}. */
+_S(ERR_MAP(ENOPROTOOPT), N_("Protocol not available"))
+#endif
+#ifdef EPROTONOSUPPORT
+/*
+TRANS The socket domain does not support the requested communications protocol
+TRANS (perhaps because the requested protocol is completely invalid).
+TRANS @xref{Creating a Socket}. */
+_S(ERR_MAP(EPROTONOSUPPORT), N_("Protocol not supported"))
+#endif
+#ifdef ESOCKTNOSUPPORT
+/*
+TRANS The socket type is not supported. */
+_S(ERR_MAP(ESOCKTNOSUPPORT), N_("Socket type not supported"))
+#endif
+#ifdef EOPNOTSUPP
+/*
+TRANS The operation you requested is not supported. Some socket functions
+TRANS don't make sense for all types of sockets, and others may not be
+TRANS implemented for all communications protocols. On @gnuhurdsystems{}, this
+TRANS error can happen for many calls when the object does not support the
+TRANS particular operation; it is a generic indication that the server knows
+TRANS nothing to do for that call. */
+_S(ERR_MAP(EOPNOTSUPP), N_("Operation not supported"))
+#endif
+#ifdef EPFNOSUPPORT
+/*
+TRANS The socket communications protocol family you requested is not supported. */
+_S(ERR_MAP(EPFNOSUPPORT), N_("Protocol family not supported"))
+#endif
+#ifdef EAFNOSUPPORT
+/*
+TRANS The address family specified for a socket is not supported; it is
+TRANS inconsistent with the protocol being used on the socket. @xref{Sockets}. */
+_S(ERR_MAP(EAFNOSUPPORT), N_("Address family not supported by protocol"))
+#endif
+#ifdef EADDRINUSE
+/*
+TRANS The requested socket address is already in use. @xref{Socket Addresses}. */
+_S(ERR_MAP(EADDRINUSE), N_("Address already in use"))
+#endif
+#ifdef EADDRNOTAVAIL
+/*
+TRANS The requested socket address is not available; for example, you tried
+TRANS to give a socket a name that doesn't match the local host name.
+TRANS @xref{Socket Addresses}. */
+_S(ERR_MAP(EADDRNOTAVAIL), N_("Cannot assign requested address"))
+#endif
+#ifdef ENETDOWN
+/*
+TRANS A socket operation failed because the network was down. */
+_S(ERR_MAP(ENETDOWN), N_("Network is down"))
+#endif
+#ifdef ENETUNREACH
+/*
+TRANS A socket operation failed because the subnet containing the remote host
+TRANS was unreachable. */
+_S(ERR_MAP(ENETUNREACH), N_("Network is unreachable"))
+#endif
+#ifdef ENETRESET
+/*
+TRANS A network connection was reset because the remote host crashed. */
+_S(ERR_MAP(ENETRESET), N_("Network dropped connection on reset"))
+#endif
+#ifdef ECONNABORTED
+/*
+TRANS A network connection was aborted locally. */
+_S(ERR_MAP(ECONNABORTED), N_("Software caused connection abort"))
+#endif
+#ifdef ECONNRESET
+/*
+TRANS A network connection was closed for reasons outside the control of the
+TRANS local host, such as by the remote machine rebooting or an unrecoverable
+TRANS protocol violation. */
+_S(ERR_MAP(ECONNRESET), N_("Connection reset by peer"))
+#endif
+#ifdef ENOBUFS
+/*
+TRANS The kernel's buffers for I/O operations are all in use. In GNU, this
+TRANS error is always synonymous with @code{ENOMEM}; you may get one or the
+TRANS other from network operations. */
+_S(ERR_MAP(ENOBUFS), N_("No buffer space available"))
+#endif
+#ifdef EISCONN
+/*
+TRANS You tried to connect a socket that is already connected.
+TRANS @xref{Connecting}. */
+_S(ERR_MAP(EISCONN), N_("Transport endpoint is already connected"))
+#endif
+#ifdef ENOTCONN
+/*
+TRANS The socket is not connected to anything. You get this error when you
+TRANS try to transmit data over a socket, without first specifying a
+TRANS destination for the data. For a connectionless socket (for datagram
+TRANS protocols, such as UDP), you get @code{EDESTADDRREQ} instead. */
+_S(ERR_MAP(ENOTCONN), N_("Transport endpoint is not connected"))
+#endif
+#ifdef EDESTADDRREQ
+/*
+TRANS No default destination address was set for the socket. You get this
+TRANS error when you try to transmit data over a connectionless socket,
+TRANS without first specifying a destination for the data with @code{connect}. */
+_S(ERR_MAP(EDESTADDRREQ), N_("Destination address required"))
+#endif
+#ifdef ESHUTDOWN
+/*
+TRANS The socket has already been shut down. */
+_S(ERR_MAP(ESHUTDOWN), N_("Cannot send after transport endpoint shutdown"))
+#endif
+#ifdef ETOOMANYREFS
+_S(ERR_MAP(ETOOMANYREFS), N_("Too many references: cannot splice"))
+#endif
+#ifdef ETIMEDOUT
+/*
+TRANS A socket operation with a specified timeout received no response during
+TRANS the timeout period. */
+_S(ERR_MAP(ETIMEDOUT), N_("Connection timed out"))
+#endif
+#ifdef ECONNREFUSED
+/*
+TRANS A remote host refused to allow the network connection (typically because
+TRANS it is not running the requested service). */
+_S(ERR_MAP(ECONNREFUSED), N_("Connection refused"))
+#endif
+#ifdef ELOOP
+/*
+TRANS Too many levels of symbolic links were encountered in looking up a file name.
+TRANS This often indicates a cycle of symbolic links. */
+_S(ERR_MAP(ELOOP), N_("Too many levels of symbolic links"))
+#endif
+#ifdef ENAMETOOLONG
+/*
+TRANS Filename too long (longer than @code{PATH_MAX}; @pxref{Limits for
+TRANS Files}) or host name too long (in @code{gethostname} or
+TRANS @code{sethostname}; @pxref{Host Identification}). */
+_S(ERR_MAP(ENAMETOOLONG), N_("File name too long"))
+#endif
+#ifdef EHOSTDOWN
+/*
+TRANS The remote host for a requested network connection is down. */
+_S(ERR_MAP(EHOSTDOWN), N_("Host is down"))
+#endif
+/*
+TRANS The remote host for a requested network connection is not reachable. */
+#ifdef EHOSTUNREACH
+_S(ERR_MAP(EHOSTUNREACH), N_("No route to host"))
+#endif
+#ifdef ENOTEMPTY
+/*
+TRANS Directory not empty, where an empty directory was expected. Typically,
+TRANS this error occurs when you are trying to delete a directory. */
+_S(ERR_MAP(ENOTEMPTY), N_("Directory not empty"))
+#endif
+#ifdef EUSERS
+/*
+TRANS The file quota system is confused because there are too many users.
+TRANS @c This can probably happen in a GNU system when using NFS. */
+_S(ERR_MAP(EUSERS), N_("Too many users"))
+#endif
+#ifdef EDQUOT
+/*
+TRANS The user's disk quota was exceeded. */
+_S(ERR_MAP(EDQUOT), N_("Disk quota exceeded"))
+#endif
+#ifdef ESTALE
+/*
+TRANS This indicates an internal confusion in the
+TRANS file system which is due to file system rearrangements on the server host
+TRANS for NFS file systems or corruption in other file systems.
+TRANS Repairing this condition usually requires unmounting, possibly repairing
+TRANS and remounting the file system. */
+_S(ERR_MAP(ESTALE), N_("Stale file handle"))
+#endif
+#ifdef EREMOTE
+/*
+TRANS An attempt was made to NFS-mount a remote file system with a file name that
+TRANS already specifies an NFS-mounted file.
+TRANS (This is an error on some operating systems, but we expect it to work
+TRANS properly on @gnuhurdsystems{}, making this error code impossible.) */
+_S(ERR_MAP(EREMOTE), N_("Object is remote"))
+#endif
+#ifdef ENOLCK
+/*
+TRANS This is used by the file locking facilities; see
+TRANS @ref{File Locks}. This error is never generated by @gnuhurdsystems{}, but
+TRANS it can result from an operation to an NFS server running another
+TRANS operating system. */
+_S(ERR_MAP(ENOLCK), N_("No locks available"))
+#endif
+#ifdef ENOSYS
+/*
+TRANS This indicates that the function called is
+TRANS not implemented at all, either in the C library itself or in the
+TRANS operating system. When you get this error, you can be sure that this
+TRANS particular function will always fail with @code{ENOSYS} unless you
+TRANS install a new version of the C library or the operating system. */
+_S(ERR_MAP(ENOSYS), N_("Function not implemented"))
+#endif
+#ifdef EILSEQ
+/*
+TRANS While decoding a multibyte character the function came along an invalid
+TRANS or an incomplete sequence of bytes or the given wide character is invalid. */
+_S(ERR_MAP(EILSEQ), N_("Invalid or incomplete multibyte or wide character"))
+#endif
+#ifdef EBADMSG
+_S(ERR_MAP(EBADMSG), N_("Bad message"))
+#endif
+#ifdef EIDRM
+_S(ERR_MAP(EIDRM), N_("Identifier removed"))
+#endif
+#ifdef EMULTIHOP
+_S(ERR_MAP(EMULTIHOP), N_("Multihop attempted"))
+#endif
+#ifdef ENODATA
+_S(ERR_MAP(ENODATA), N_("No data available"))
+#endif
+#ifdef ENOLINK
+_S(ERR_MAP(ENOLINK), N_("Link has been severed"))
+#endif
+#ifdef ENOMSG
+_S(ERR_MAP(ENOMSG), N_("No message of desired type"))
+#endif
+#ifdef ENOSR
+_S(ERR_MAP(ENOSR), N_("Out of streams resources"))
+#endif
+#ifdef ENOSTR
+_S(ERR_MAP(ENOSTR), N_("Device not a stream"))
+#endif
+#ifdef EOVERFLOW
+_S(ERR_MAP(EOVERFLOW), N_("Value too large for defined data type"))
+#endif
+#ifdef EPROTO
+_S(ERR_MAP(EPROTO), N_("Protocol error"))
+#endif
+#ifdef ETIME
+_S(ERR_MAP(ETIME), N_("Timer expired"))
+#endif
+#ifdef ECANCELED
+/*
+TRANS An asynchronous operation was canceled before it
+TRANS completed. @xref{Asynchronous I/O}. When you call @code{aio_cancel},
+TRANS the normal result is for the operations affected to complete with this
+TRANS error; @pxref{Cancel AIO Operations}. */
+_S(ERR_MAP(ECANCELED), N_("Operation canceled"))
+#endif
+#ifdef EOWNERDEAD
+_S(ERR_MAP(EOWNERDEAD), N_("Owner died"))
+#endif
+#ifdef ENOTRECOVERABLE
+_S(ERR_MAP(ENOTRECOVERABLE), N_("State not recoverable"))
+#endif
+#ifdef ERESTART
+_S(ERR_MAP(ERESTART), N_("Interrupted system call should be restarted"))
+#endif
+#ifdef ECHRNG
+_S(ERR_MAP(ECHRNG), N_("Channel number out of range"))
+#endif
+#ifdef EL2NSYNC
+_S(ERR_MAP(EL2NSYNC), N_("Level 2 not synchronized"))
+#endif
+#ifdef EL3HLT
+_S(ERR_MAP(EL3HLT), N_("Level 3 halted"))
+#endif
+#ifdef EL3RST
+_S(ERR_MAP(EL3RST), N_("Level 3 reset"))
+#endif
+#ifdef ELNRNG
+_S(ERR_MAP(ELNRNG), N_("Link number out of range"))
+#endif
+#ifdef EUNATCH
+_S(ERR_MAP(EUNATCH), N_("Protocol driver not attached"))
+#endif
+#ifdef ENOCSI
+_S(ERR_MAP(ENOCSI), N_("No CSI structure available"))
+#endif
+#ifdef EL2HLT
+_S(ERR_MAP(EL2HLT), N_("Level 2 halted"))
+#endif
+#ifdef EBADE
+_S(ERR_MAP(EBADE), N_("Invalid exchange"))
+#endif
+#ifdef EBADR
+_S(ERR_MAP(EBADR), N_("Invalid request descriptor"))
+#endif
+#ifdef EXFULL
+_S(ERR_MAP(EXFULL), N_("Exchange full"))
+#endif
+#ifdef ENOANO
+_S(ERR_MAP(ENOANO), N_("No anode"))
+#endif
+#ifdef EBADRQC
+_S(ERR_MAP(EBADRQC), N_("Invalid request code"))
+#endif
+#ifdef EBADSLT
+_S(ERR_MAP(EBADSLT), N_("Invalid slot"))
+#endif
+#ifdef EBFONT
+_S(ERR_MAP(EBFONT), N_("Bad font file format"))
+#endif
+#ifdef ENONET
+_S(ERR_MAP(ENONET), N_("Machine is not on the network"))
+#endif
+#ifdef ENOPKG
+_S(ERR_MAP(ENOPKG), N_("Package not installed"))
+#endif
+#ifdef EADV
+_S(ERR_MAP(EADV), N_("Advertise error"))
+#endif
+#ifdef ESRMNT
+_S(ERR_MAP(ESRMNT), N_("Srmount error"))
+#endif
+#ifdef ECOMM
+_S(ERR_MAP(ECOMM), N_("Communication error on send"))
+#endif
+#ifdef EDOTDOT
+_S(ERR_MAP(EDOTDOT), N_("RFS specific error"))
+#endif
+#ifdef ENOTUNIQ
+_S(ERR_MAP(ENOTUNIQ), N_("Name not unique on network"))
+#endif
+#ifdef EBADFD
+_S(ERR_MAP(EBADFD), N_("File descriptor in bad state"))
+#endif
+#ifdef EREMCHG
+_S(ERR_MAP(EREMCHG), N_("Remote address changed"))
+#endif
+#ifdef ELIBACC
+_S(ERR_MAP(ELIBACC), N_("Can not access a needed shared library"))
+#endif
+#ifdef ELIBBAD
+_S(ERR_MAP(ELIBBAD), N_("Accessing a corrupted shared library"))
+#endif
+#ifdef ELIBSCN
+_S(ERR_MAP(ELIBSCN), N_(".lib section in a.out corrupted"))
+#endif
+#ifdef ELIBMAX
+_S(ERR_MAP(ELIBMAX), N_("Attempting to link in too many shared libraries"))
+#endif
+#ifdef ELIBEXEC
+_S(ERR_MAP(ELIBEXEC), N_("Cannot exec a shared library directly"))
+#endif
+#ifdef ESTRPIPE
+_S(ERR_MAP(ESTRPIPE), N_("Streams pipe error"))
+#endif
+#ifdef EUCLEAN
+_S(ERR_MAP(EUCLEAN), N_("Structure needs cleaning"))
+#endif
+#ifdef ENOTNAM
+_S(ERR_MAP(ENOTNAM), N_("Not a XENIX named type file"))
+#endif
+#ifdef ENAVAIL
+_S(ERR_MAP(ENAVAIL), N_("No XENIX semaphores available"))
+#endif
+#ifdef EISNAM
+_S(ERR_MAP(EISNAM), N_("Is a named type file"))
+#endif
+#ifdef EREMOTEIO
+_S(ERR_MAP(EREMOTEIO), N_("Remote I/O error"))
+#endif
+#ifdef ENOMEDIUM
+_S(ERR_MAP(ENOMEDIUM), N_("No medium found"))
+#endif
+#ifdef EMEDIUMTYPE
+_S(ERR_MAP(EMEDIUMTYPE), N_("Wrong medium type"))
+#endif
+#ifdef ENOKEY
+_S(ERR_MAP(ENOKEY), N_("Required key not available"))
+#endif
+#ifdef EKEYEXPIRED
+_S(ERR_MAP(EKEYEXPIRED), N_("Key has expired"))
+#endif
+#ifdef EKEYREVOKED
+_S(ERR_MAP(EKEYREVOKED), N_("Key has been revoked"))
+#endif
+#ifdef EKEYREJECTED
+_S(ERR_MAP(EKEYREJECTED), N_("Key was rejected by service"))
+#endif
+#ifdef ERFKILL
+_S(ERR_MAP(ERFKILL), N_("Operation not possible due to RF-kill"))
+#endif
+#ifdef EHWPOISON
+_S(ERR_MAP(EHWPOISON), N_("Memory page has hardware error"))
+#endif
+#ifdef EBADRPC
+_S(ERR_MAP(EBADRPC), N_("RPC struct is bad"))
+#endif
+#ifdef EFTYPE
+/*
+TRANS The file was the wrong type for the
+TRANS operation, or a data file had the wrong format.
+TRANS
+TRANS On some systems @code{chmod} returns this error if you try to set the
+TRANS sticky bit on a non-directory file; @pxref{Setting Permissions}. */
+_S(ERR_MAP(EFTYPE), N_("Inappropriate file type or format"))
+#endif
+#ifdef EPROCUNAVAIL
+_S(ERR_MAP(EPROCUNAVAIL), N_("RPC bad procedure for program"))
+#endif
+#ifdef EAUTH
+_S(ERR_MAP(EAUTH), N_("Authentication error"))
+#endif
+#ifdef EDIED
+/*
+TRANS On @gnuhurdsystems{}, opening a file returns this error when the file is
+TRANS translated by a program and the translator program dies while starting
+TRANS up, before it has connected to the file. */
+_S(ERR_MAP(EDIED), N_("Translator died"))
+#endif
+#ifdef ERPCMISMATCH
+_S(ERR_MAP(ERPCMISMATCH), N_("RPC version wrong"))
+#endif
+#ifdef EGREGIOUS
+/*
+TRANS You did @strong{what}? */
+_S(ERR_MAP(EGREGIOUS), N_("You really blew it this time"))
+#endif
+#ifdef EPROCLIM
+/*
+TRANS This means that the per-user limit on new process would be exceeded by
+TRANS an attempted @code{fork}. @xref{Limits on Resources}, for details on
+TRANS the @code{RLIMIT_NPROC} limit. */
+_S(ERR_MAP(EPROCLIM), N_("Too many processes"))
+#endif
+#ifdef EGRATUITOUS
+/*
+TRANS This error code has no purpose. */
+_S(ERR_MAP(EGRATUITOUS), N_("Gratuitous error"))
+#endif
+#if defined (ENOTSUP) && ENOTSUP != EOPNOTSUPP
+/*
+TRANS A function returns this error when certain parameter
+TRANS values are valid, but the functionality they request is not available.
+TRANS This can mean that the function does not implement a particular command
+TRANS or option value or flag bit at all. For functions that operate on some
+TRANS object given in a parameter, such as a file descriptor or a port, it
+TRANS might instead mean that only @emph{that specific object} (file
+TRANS descriptor, port, etc.) is unable to support the other parameters given;
+TRANS different file descriptors might support different ranges of parameter
+TRANS values.
+TRANS
+TRANS If the entire function is not available at all in the implementation,
+TRANS it returns @code{ENOSYS} instead. */
+_S(ERR_MAP(ENOTSUP), N_("Not supported"))
+#endif
+#ifdef EPROGMISMATCH
+_S(ERR_MAP(EPROGMISMATCH), N_("RPC program version wrong"))
+#endif
+#ifdef EBACKGROUND
+/*
+TRANS On @gnuhurdsystems{}, servers supporting the @code{term} protocol return
+TRANS this error for certain operations when the caller is not in the
+TRANS foreground process group of the terminal. Users do not usually see this
+TRANS error because functions such as @code{read} and @code{write} translate
+TRANS it into a @code{SIGTTIN} or @code{SIGTTOU} signal. @xref{Job Control},
+TRANS for information on process groups and these signals. */
+_S(ERR_MAP(EBACKGROUND), N_("Inappropriate operation for background process"))
+#endif
+#ifdef EIEIO
+/*
+TRANS Go home and have a glass of warm, dairy-fresh milk.
+TRANS @c Okay. Since you are dying to know, I'll tell you.
+TRANS @c This is a joke, obviously. There is a children's song which begins,
+TRANS @c "Old McDonald had a farm, e-i-e-i-o." Every time I see the (real)
+TRANS @c errno macro EIO, I think about that song. Probably most of my
+TRANS @c compatriots who program on Unix do, too. One of them must have stayed
+TRANS @c up a little too late one night and decided to add it to Hurd or Glibc.
+TRANS @c Whoever did it should be castigated, but it made me laugh.
+TRANS @c --jtobey@channel1.com
+TRANS @c
+TRANS @c "bought the farm" means "died". -jtobey
+TRANS @c
+TRANS @c Translators, please do not translate this litteraly, translate it into
+TRANS @c an idiomatic funny way of saying that the computer died. */
+_S(ERR_MAP(EIEIO), N_("Computer bought the farm"))
+#endif
+#if defined (EWOULDBLOCK) && EWOULDBLOCK != EAGAIN
+/*
+TRANS In @theglibc{}, this is another name for @code{EAGAIN} (above).
+TRANS The values are always the same, on every operating system.
+TRANS
+TRANS C libraries in many older Unix systems have @code{EWOULDBLOCK} as a
+TRANS separate error code. */
+_S(ERR_MAP(EWOULDBLOCK), N_("Operation would block"))
+#endif
+#ifdef ENEEDAUTH
+_S(ERR_MAP(ENEEDAUTH), N_("Need authenticator"))
+#endif
+#ifdef ED
+/*
+TRANS The experienced user will know what is wrong.
+TRANS @c This error code is a joke. Its perror text is part of the joke.
+TRANS @c Don't change it. */
+_S(ERR_MAP(ED), N_("?"))
+#endif
+#ifdef EPROGUNAVAIL
+_S(ERR_MAP(EPROGUNAVAIL), N_("RPC program not available"))
+#endif
diff --git a/sysdeps/mach/hurd/err_hurd.sub b/sysdeps/mach/hurd/err_hurd.sub
index 4a4dee3aa3..3e9b37e155 100644
--- a/sysdeps/mach/hurd/err_hurd.sub
+++ b/sysdeps/mach/hurd/err_hurd.sub
@@ -1,12 +1,11 @@
/* This file defines the Mach error system for Hurd server errors. */
#include <errno.h>
-
-extern const char *const _hurd_errlist[];
+#include <stdio.h> /* For _sys_errlist_internal */
/* Omit `const' because we are included with `static'
defined to `static const'. */
static struct error_subsystem err_hurd_sub[] =
{
- { "(os/hurd)", _HURD_ERRNOS, (const char *const *) _hurd_errlist },
+ { "(os/hurd)", _HURD_ERRNOS, _sys_errlist_internal },
};
diff --git a/sysdeps/mach/hurd/errlist.c b/sysdeps/mach/hurd/errlist.c
index 451e8fa1eb..be752f02b9 100644
--- a/sysdeps/mach/hurd/errlist.c
+++ b/sysdeps/mach/hurd/errlist.c
@@ -15,14 +15,7 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
-/* sys_errlist cannot have Unix semantics on the Hurd, so it is easier just
- to rename it. We also need to remap error codes to array indices by
- taking their subcode. */
-#define _sys_errlist_internal _hurd_errlist
-#define _sys_nerr_internal _hurd_nerr
-#define ERRLIST_NO_COMPAT 1
-
#include <mach/error.h>
-#define ERR_REMAP(n) (err_get_code (n))
-#include <sysdeps/gnu/errlist.c>
+#define ERR_MAP(value) err_get_code (value)
+#include <stdio-common/errlist.c>
diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
index 52ca223ab2..f72741b7e5 100644
--- a/sysdeps/unix/sysv/linux/Versions
+++ b/sysdeps/unix/sysv/linux/Versions
@@ -1,9 +1,4 @@
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 {
# functions used in inline functions or macros
__cmsg_nxthdr;
@@ -56,7 +51,6 @@ libc {
# u*
umount; uselib;
- #errlist-compat 123
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
}
GLIBC_2.1 {
@@ -84,7 +78,6 @@ libc {
# u*
umount2;
- #errlist-compat 125
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
}
GLIBC_2.2 {
@@ -102,7 +95,6 @@ libc {
# r*
readahead;
- #errlist-compat 126
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
}
GLIBC_2.3.2 {
@@ -120,7 +112,6 @@ libc {
unshare;
- #errlist-compat 132
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
}
GLIBC_2.5 {
@@ -142,7 +133,6 @@ libc {
fallocate;
}
GLIBC_2.12 {
- #errlist-compat 135
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
ntp_gettimex;
diff --git a/sysdeps/unix/sysv/linux/alpha/Versions b/sysdeps/unix/sysv/linux/alpha/Versions
index 3b7971c2a3..b90d5f2e5a 100644
--- a/sysdeps/unix/sysv/linux/alpha/Versions
+++ b/sysdeps/unix/sysv/linux/alpha/Versions
@@ -1,12 +1,5 @@
libc {
- # The comment lines with "#errlist-compat" are magic; see
- # sysdeps/gnu/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 131
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
# Unfortunately in wider use.
@@ -33,7 +26,6 @@ libc {
pciconfig_read; pciconfig_write; sethae;
}
GLIBC_2.1 {
- #errlist-compat 131
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
# Linux/Alpha 64-bit timeval functions.
@@ -70,19 +62,15 @@ libc {
wordexp;
}
GLIBC_2.3 {
- #errlist-compat 132
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
}
GLIBC_2.4 {
- #errlist-compat 138
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
}
GLIBC_2.12 {
- #errlist-compat 139
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
}
GLIBC_2.16 {
- #errlist-compat 140
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
}
GLIBC_2.27 {
diff --git a/sysdeps/unix/sysv/linux/alpha/errlist-compat.c b/sysdeps/unix/sysv/linux/alpha/errlist-compat.c
new file mode 100644
index 0000000000..709807aa6b
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/alpha/errlist-compat.c
@@ -0,0 +1,43 @@
+/* Linux sys_errlist compat symbol definitions. Alpha version.
+ Copyright (C) 2020 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, see
+ <https://www.gnu.org/licenses/>. */
+
+#include <errlist-compat.h>
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
+DEFINE_COMPAT_ERRLIST (131, GLIBC_2_0)
+#endif
+
+#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_3)
+DEFINE_COMPAT_ERRLIST (131, GLIBC_2_1)
+#endif
+
+#if SHLIB_COMPAT (libc, GLIBC_2_3, GLIBC_2_4)
+DEFINE_COMPAT_ERRLIST (132, GLIBC_2_3)
+#endif
+
+#if SHLIB_COMPAT (libc, GLIBC_2_4, GLIBC_2_12)
+DEFINE_COMPAT_ERRLIST (138, GLIBC_2_4)
+#endif
+
+#if SHLIB_COMPAT (libc, GLIBC_2_12, GLIBC_2_16)
+DEFINE_COMPAT_ERRLIST (139, GLIBC_2_12)
+#endif
+
+#if SHLIB_COMPAT (libc, GLIBC_2_16, GLIBC_2_32)
+DEFINE_COMPAT_ERRLIST (140, GLIBC_2_16)
+#endif
diff --git a/sysdeps/unix/sysv/linux/bits/sys_errlist.h b/sysdeps/unix/sysv/linux/errlist-compat.c
index d6f5fa0a5e..c4d79b70aa 100644
--- a/sysdeps/unix/sysv/linux/bits/sys_errlist.h
+++ b/sysdeps/unix/sysv/linux/errlist-compat.c
@@ -1,5 +1,5 @@
-/* Declare sys_errlist and sys_nerr, or don't. Compatibility (do) version.
- Copyright (C) 2002-2020 Free Software Foundation, Inc.
+/* Linux sys_errlist compat symbol definitions. Generic version.
+ Copyright (C) 2020 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
@@ -16,17 +16,24 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
-#ifndef _STDIO_H
-# error "Never include <bits/sys_errlist.h> directly; use <stdio.h> instead."
+#include <errlist-compat.h>
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
+DEFINE_COMPAT_ERRLIST (123, GLIBC_2_0)
#endif
-/* sys_errlist and sys_nerr are deprecated. Use strerror instead. */
+#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_3)
+DEFINE_COMPAT_ERRLIST (125, GLIBC_2_1)
+#endif
-#ifdef __USE_MISC
-extern int sys_nerr;
-extern const char *const sys_errlist[];
+#if SHLIB_COMPAT (libc, GLIBC_2_3, GLIBC_2_4)
+DEFINE_COMPAT_ERRLIST (126, GLIBC_2_3)
#endif
-#ifdef __USE_GNU
-extern int _sys_nerr;
-extern const char *const _sys_errlist[];
+
+#if SHLIB_COMPAT (libc, GLIBC_2_4, GLIBC_2_12)
+DEFINE_COMPAT_ERRLIST (132, GLIBC_2_4)
+#endif
+
+#if SHLIB_COMPAT (libc, GLIBC_2_12, GLIBC_2_32)
+DEFINE_COMPAT_ERRLIST (135, GLIBC_2_12)
#endif
diff --git a/sysdeps/unix/sysv/linux/errlist-compat.h b/sysdeps/unix/sysv/linux/errlist-compat.h
new file mode 100644
index 0000000000..edd35fd4ed
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/errlist-compat.h
@@ -0,0 +1,43 @@
+/* Linux sys_errlist compatibility macro definitions.
+ Copyright (C) 2020 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, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _ERRLIST_COMPAT_H
+#define _ERRLIST_COMPAT_H
+
+#include <shlib-compat.h>
+
+/* Define new compat symbols for symbols _sys_errlist, sys_errlist,
+ _sys_nerr, and sys_nerr for version VERSION with NUMBERERR times number of
+ bytes per long int size.
+ Both _sys_errlist and sys_errlist alias to _sys_errlist_internal symbol
+ (defined on errlist.c) while _sys_nerr and sys_nerr created new variable
+ with the expected size. */
+#define DEFINE_COMPAT_ERRLIST(NUMBERERR, VERSION) \
+ const int __##VERSION##_sys_nerr = NUMBERERR; \
+ strong_alias (__##VERSION##_sys_nerr, __##VERSION##__sys_nerr); \
+ declare_symbol_alias (__ ## VERSION ## _sys_errlist, _sys_errlist_internal,\
+ object, NUMBERERR * (ULONG_WIDTH / UCHAR_WIDTH)); \
+ declare_symbol_alias (__ ## VERSION ## __sys_errlist, \
+ _sys_errlist_internal, object, \
+ NUMBERERR * (ULONG_WIDTH / UCHAR_WIDTH)); \
+ compat_symbol (libc, __## VERSION ## _sys_nerr, sys_nerr, VERSION); \
+ compat_symbol (libc, __## VERSION ## __sys_nerr, _sys_nerr, VERSION); \
+ compat_symbol (libc, __## VERSION ## _sys_errlist, sys_errlist, VERSION); \
+ compat_symbol (libc, __## VERSION ## __sys_errlist, _sys_errlist, VERSION);\
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/hppa/Versions b/sysdeps/unix/sysv/linux/hppa/Versions
index b5098b2171..9532d207fc 100644
--- a/sysdeps/unix/sysv/linux/hppa/Versions
+++ b/sysdeps/unix/sysv/linux/hppa/Versions
@@ -1,11 +1,5 @@
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.1 {
- #errlist-compat 253
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
}
GLIBC_2.2 {
@@ -13,22 +7,18 @@ libc {
getrlimit; setrlimit; getrlimit64; setrlimit64;
}
GLIBC_2.3 {
- #errlist-compat 254
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
}
GLIBC_2.4 {
- #errlist-compat 256
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
}
GLIBC_2.11 {
fallocate64;
}
GLIBC_2.12 {
- #errlist-compat 257
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
}
GLIBC_2.17 {
- #errlist-compat 260
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
prlimit64;
}
diff --git a/sysdeps/unix/sysv/linux/hppa/errlist-compat.c b/sysdeps/unix/sysv/linux/hppa/errlist-compat.c
new file mode 100644
index 0000000000..65860d884c
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/hppa/errlist-compat.c
@@ -0,0 +1,39 @@
+/* Linux sys_errlist compat symbol definitions. HPPA version.
+ Copyright (C) 2020 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, see
+ <https://www.gnu.org/licenses/>. */
+
+#include <errlist-compat.h>
+
+#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_3)
+DEFINE_COMPAT_ERRLIST (253, GLIBC_2_1)
+#endif
+
+#if SHLIB_COMPAT (libc, GLIBC_2_3, GLIBC_2_4)
+DEFINE_COMPAT_ERRLIST (254, GLIBC_2_3)
+#endif
+
+#if SHLIB_COMPAT (libc, GLIBC_2_4, GLIBC_2_12)
+DEFINE_COMPAT_ERRLIST (256, GLIBC_2_4)
+#endif
+
+#if SHLIB_COMPAT (libc, GLIBC_2_12, GLIBC_2_17)
+DEFINE_COMPAT_ERRLIST (257, GLIBC_2_12)
+#endif
+
+#if SHLIB_COMPAT (libc, GLIBC_2_17, GLIBC_2_32)
+DEFINE_COMPAT_ERRLIST (260, GLIBC_2_17)
+#endif
diff --git a/sysdeps/unix/sysv/linux/mips/Versions b/sysdeps/unix/sysv/linux/mips/Versions
index 453f276aad..0ec82dc480 100644
--- a/sysdeps/unix/sysv/linux/mips/Versions
+++ b/sysdeps/unix/sysv/linux/mips/Versions
@@ -5,13 +5,7 @@ ld {
}
}
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;
# Exception handling support functions from libgcc
@@ -28,7 +22,6 @@ libc {
sysmips;
}
GLIBC_2.2 {
- #errlist-compat 1134
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
# _*
diff --git a/bits/sys_errlist.h b/sysdeps/unix/sysv/linux/mips/errlist-compat.c
index 40425a74c3..b720db9244 100644
--- a/bits/sys_errlist.h
+++ b/sysdeps/unix/sysv/linux/mips/errlist-compat.c
@@ -1,5 +1,5 @@
-/* Declare sys_errlist and sys_nerr, or don't. Don't version.
- Copyright (C) 2002-2020 Free Software Foundation, Inc.
+/* Linux sys_errlist compat symbol definitions. MIPS version.
+ Copyright (C) 2020 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
@@ -16,8 +16,12 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
-#ifndef _STDIO_H
-# error "Never include <bits/sys_errlist.h> directly; use <stdio.h> instead."
+#include <errlist-compat.h>
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+DEFINE_COMPAT_ERRLIST (123, GLIBC_2_0)
#endif
-/* sys_errlist and sys_nerr are deprecated. Use strerror instead. */
+#if SHLIB_COMPAT (libc, GLIBC_2_2, GLIBC_2_32)
+DEFINE_COMPAT_ERRLIST (1134, GLIBC_2_1)
+#endif
diff --git a/sysdeps/unix/sysv/linux/sparc/Versions b/sysdeps/unix/sysv/linux/sparc/Versions
index f056addee6..61e57fae99 100644
--- a/sysdeps/unix/sysv/linux/sparc/Versions
+++ b/sysdeps/unix/sysv/linux/sparc/Versions
@@ -1,30 +1,20 @@
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.
-
GLIBC_2.0 {
- #errlist-compat 127
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
}
GLIBC_2.1 {
- #errlist-compat 127
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
}
GLIBC_2.3 {
- #errlist-compat 128
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
}
GLIBC_2.4 {
- #errlist-compat 134
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
}
GLIBC_2.12 {
- #errlist-compat 135
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
}
GLIBC_2.16 {
- #errlist-compat 136
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
__getshmlba;
diff --git a/sysdeps/unix/sysv/linux/sparc/errlist-compat.c b/sysdeps/unix/sysv/linux/sparc/errlist-compat.c
new file mode 100644
index 0000000000..43fc364add
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sparc/errlist-compat.c
@@ -0,0 +1,43 @@
+/* Linux sys_errlist compat symbol definitions. Sparc version.
+ Copyright (C) 2020 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, see
+ <https://www.gnu.org/licenses/>. */
+
+#include <errlist-compat.h>
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
+DEFINE_COMPAT_ERRLIST (127, GLIBC_2_0)
+#endif
+
+#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_3)
+DEFINE_COMPAT_ERRLIST (127, GLIBC_2_1)
+#endif
+
+#if SHLIB_COMPAT (libc, GLIBC_2_3, GLIBC_2_4)
+DEFINE_COMPAT_ERRLIST (128, GLIBC_2_3)
+#endif
+
+#if SHLIB_COMPAT (libc, GLIBC_2_4, GLIBC_2_12)
+DEFINE_COMPAT_ERRLIST (134, GLIBC_2_4)
+#endif
+
+#if SHLIB_COMPAT (libc, GLIBC_2_12, GLIBC_2_16)
+DEFINE_COMPAT_ERRLIST (135, GLIBC_2_12)
+#endif
+
+#if SHLIB_COMPAT (libc, GLIBC_2_16, GLIBC_2_32)
+DEFINE_COMPAT_ERRLIST (136, GLIBC_2_16)
+#endif