Message ID | 20200619134352.297146-3-adhemerval.zanella@linaro.org |
---|---|
State | New |
Headers | show |
Series | [v5,01/13] signal: Add signum-{generic,arch}.h | expand |
On 6/19/20 9:43 AM, Adhemerval Zanella wrote: > The symbol is deprecated by strerror since its usage imposes some issues > such as copy relocations. Agreed, thanks for deprecating this. > Its internal name is also changed to _sys_errlist_internal to avoid > static linking usage. The compat code is also refactored by removing > the over enginered errlist-compat.c generation from manual entried and > extra comment token in linker script file. It disantangle the code > generation from manual and simplify both Linux and Hurd compat code. > > The definitions from errlist.c are moved to errlist.h and a new test > is added to avoid a new errno entry without an associated one in manual. > > Checked on x86_64-linux-gnu and i686-linux-gnu. I also run a check-abi > on all affected platforms. OK for master if you copy all TRANS statements into C-style comments in the final committed version of errlist.h, these are special comments processed by po/Makefile instructions to gettext. I verified that libc.pot regeneration catches all the translations in errlist.h (but the translation helper text in TRANS is missing as noted). Tested on x86_64 and i686. Tested-by: Carlos O'Donell <carlos@redhat.com> Reviewed-by: Carlos O'Donell <carlos@redhat.com> > --- > NEWS | 6 + > include/stdio.h | 2 +- > libio/Makefile | 2 +- > libio/stdio.h | 6 - > scripts/build-many-glibcs.py | 3 +- > stdio-common/Makefile | 11 + > stdio-common/errlist-compat.c | 1 + > stdio-common/errlist.c | 30 +- > stdio-common/tst-errno-manual.py | 73 + > string/_strerror.c | 6 +- > string/strerror_l.c | 8 +- > string/xpg-strerror.c | 9 +- > sysdeps/gnu/Makefile | 43 - > sysdeps/gnu/errlist-compat.awk | 133 -- > sysdeps/gnu/errlist.awk | 110 -- > sysdeps/gnu/errlist.c | 1495 ----------------- > sysdeps/gnu/errlist.h | 448 +++++ > sysdeps/mach/hurd/err_hurd.sub | 5 +- > sysdeps/mach/hurd/errlist.c | 11 +- > sysdeps/unix/sysv/linux/Versions | 10 - > sysdeps/unix/sysv/linux/alpha/Versions | 12 - > .../unix/sysv/linux/alpha/errlist-compat.c | 43 + > .../{bits/sys_errlist.h => errlist-compat.c} | 29 +- > sysdeps/unix/sysv/linux/errlist-compat.h | 43 + > sysdeps/unix/sysv/linux/hppa/Versions | 10 - > sysdeps/unix/sysv/linux/hppa/errlist-compat.c | 39 + > sysdeps/unix/sysv/linux/mips/Versions | 7 - > .../unix/sysv/linux/mips/errlist-compat.c | 14 +- > sysdeps/unix/sysv/linux/sparc/Versions | 10 - > .../unix/sysv/linux/sparc/errlist-compat.c | 43 + > 30 files changed, 764 insertions(+), 1898 deletions(-) > create mode 100644 stdio-common/errlist-compat.c > create mode 100755 stdio-common/tst-errno-manual.py > delete mode 100644 sysdeps/gnu/errlist-compat.awk > delete mode 100644 sysdeps/gnu/errlist.awk > delete mode 100644 sysdeps/gnu/errlist.c > create mode 100644 sysdeps/gnu/errlist.h > create mode 100644 sysdeps/unix/sysv/linux/alpha/errlist-compat.c > rename sysdeps/unix/sysv/linux/{bits/sys_errlist.h => errlist-compat.c} (56%) > create mode 100644 sysdeps/unix/sysv/linux/errlist-compat.h > create mode 100644 sysdeps/unix/sysv/linux/hppa/errlist-compat.c > rename bits/sys_errlist.h => sysdeps/unix/sysv/linux/mips/errlist-compat.c (69%) > create mode 100644 sysdeps/unix/sysv/linux/sparc/errlist-compat.c > > diff --git a/NEWS b/NEWS > index 0f5fa0f3b1..df03a34657 100644 > --- a/NEWS > +++ b/NEWS > @@ -57,6 +57,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. OK. Thanks for that. Likewise see my note about updating packaging change notes in the wiki for the release such that we have a summary for downstream maintainers that may need to fix distro software. While they might read the NEWS it's easier to point them at a detailed list of packaging changes that we write (and the audience for those is downstream distro maintainers rather than the more generic NEWS information). > + > 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; OK. > > 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 \ OK. Remove header. > 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> OK. Remove. > - > > #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',): OK. Remove one more auto-generated file! Yay! > 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 0a8d66b846..8f15eb7e56 100644 > --- a/stdio-common/Makefile > +++ b/stdio-common/Makefile > @@ -84,6 +84,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 OK. > + > include ../Rules > > ifeq ($(run-built-tests),yes) > @@ -128,6 +130,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) OK. > + > 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. */ OK. > 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 OK. > }; > > -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> OK. > 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() OK. > 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); OK. > } > 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); OK. > } > > 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); > - OK. > 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 > - OK. > 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\")"; > -} OK. I like removing awk that generates C code :-) > 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 OK. > diff --git a/sysdeps/gnu/errlist.h b/sysdeps/gnu/errlist.h > new file mode 100644 > index 0000000000..d4c857b9a9 > --- /dev/null > +++ b/sysdeps/gnu/errlist.h > @@ -0,0 +1,448 @@ > +#ifndef ERR_MAP > +#define ERR_MAP(value) value Please move all of the TRANS entries into this file as C-style comments. They are required information for the accurate translation of the strings. > +#endif > +_S(ERR_MAP(0), N_("Success")) > +#ifdef EPERM > +_S(ERR_MAP(EPERM), N_("Operation not permitted")) > +#endif > +#ifdef ENOENT > +_S(ERR_MAP(ENOENT), N_("No such file or directory")) > +#endif > +#ifdef ESRCH > +_S(ERR_MAP(ESRCH), N_("No such process")) > +#endif > +#ifdef EINTR > +_S(ERR_MAP(EINTR), N_("Interrupted system call")) > +#endif > +#ifdef EIO > +_S(ERR_MAP(EIO), N_("Input/output error")) > +#endif > +#ifdef ENXIO > +_S(ERR_MAP(ENXIO), N_("No such device or address")) > +#endif > +#ifdef E2BIG > +_S(ERR_MAP(E2BIG), N_("Argument list too long")) > +#endif > +#ifdef ENOEXEC > +_S(ERR_MAP(ENOEXEC), N_("Exec format error")) > +#endif > +#ifdef EBADF > +_S(ERR_MAP(EBADF), N_("Bad file descriptor")) > +#endif > +#ifdef ECHILD > +_S(ERR_MAP(ECHILD), N_("No child processes")) > +#endif > +#ifdef EDEADLK > +_S(ERR_MAP(EDEADLK), N_("Resource deadlock avoided")) > +#endif > +#ifdef ENOMEM > +_S(ERR_MAP(ENOMEM), N_("Cannot allocate memory")) > +#endif > +#ifdef EACCES > +_S(ERR_MAP(EACCES), N_("Permission denied")) > +#endif > +#ifdef EFAULT > +_S(ERR_MAP(EFAULT), N_("Bad address")) > +#endif > +#ifdef ENOTBLK > +_S(ERR_MAP(ENOTBLK), N_("Block device required")) > +#endif > +#ifdef EBUSY > +_S(ERR_MAP(EBUSY), N_("Device or resource busy")) > +#endif > +#ifdef EEXIST > +_S(ERR_MAP(EEXIST), N_("File exists")) > +#endif > +#ifdef EXDEV > +_S(ERR_MAP(EXDEV), N_("Invalid cross-device link")) > +#endif > +#ifdef ENODEV > +_S(ERR_MAP(ENODEV), N_("No such device")) > +#endif > +#ifdef ENOTDIR > +_S(ERR_MAP(ENOTDIR), N_("Not a directory")) > +#endif > +#ifdef EISDIR > +_S(ERR_MAP(EISDIR), N_("Is a directory")) > +#endif > +#ifdef EINVAL > +_S(ERR_MAP(EINVAL), N_("Invalid argument")) > +#endif > +#ifdef EMFILE > +_S(ERR_MAP(EMFILE), N_("Too many open files")) > +#endif > +#ifdef ENFILE > +_S(ERR_MAP(ENFILE), N_("Too many open files in system")) > +#endif > +#ifdef ENOTTY > +_S(ERR_MAP(ENOTTY), N_("Inappropriate ioctl for device")) > +#endif > +#ifdef ETXTBSY > +_S(ERR_MAP(ETXTBSY), N_("Text file busy")) > +#endif > +#ifdef EFBIG > +_S(ERR_MAP(EFBIG), N_("File too large")) > +#endif > +#ifdef ENOSPC > +_S(ERR_MAP(ENOSPC), N_("No space left on device")) > +#endif > +#ifdef ESPIPE > +_S(ERR_MAP(ESPIPE), N_("Illegal seek")) > +#endif > +#ifdef EROFS > +_S(ERR_MAP(EROFS), N_("Read-only file system")) > +#endif > +#ifdef EMLINK > +_S(ERR_MAP(EMLINK), N_("Too many links")) > +#endif > +#ifdef EPIPE > +_S(ERR_MAP(EPIPE), N_("Broken pipe")) > +#endif > +#ifdef EDOM > +_S(ERR_MAP(EDOM), N_("Numerical argument out of domain")) > +#endif > +#ifdef ERANGE > +_S(ERR_MAP(ERANGE), N_("Numerical result out of range")) > +#endif > +#ifdef EAGAIN > +_S(ERR_MAP(EAGAIN), N_("Resource temporarily unavailable")) > +#endif > +#ifdef EINPROGRESS > +_S(ERR_MAP(EINPROGRESS), N_("Operation now in progress")) > +#endif > +#ifdef EALREADY > +_S(ERR_MAP(EALREADY), N_("Operation already in progress")) > +#endif > +#ifdef ENOTSOCK > +_S(ERR_MAP(ENOTSOCK), N_("Socket operation on non-socket")) > +#endif > +#ifdef EMSGSIZE > +_S(ERR_MAP(EMSGSIZE), N_("Message too long")) > +#endif > +#ifdef EPROTOTYPE > +_S(ERR_MAP(EPROTOTYPE), N_("Protocol wrong type for socket")) > +#endif > +#ifdef ENOPROTOOPT > +_S(ERR_MAP(ENOPROTOOPT), N_("Protocol not available")) > +#endif > +#ifdef EPROTONOSUPPORT > +_S(ERR_MAP(EPROTONOSUPPORT), N_("Protocol not supported")) > +#endif > +#ifdef ESOCKTNOSUPPORT > +_S(ERR_MAP(ESOCKTNOSUPPORT), N_("Socket type not supported")) > +#endif > +#ifdef EOPNOTSUPP > +_S(ERR_MAP(EOPNOTSUPP), N_("Operation not supported")) > +#endif > +#ifdef EPFNOSUPPORT > +_S(ERR_MAP(EPFNOSUPPORT), N_("Protocol family not supported")) > +#endif > +#ifdef EAFNOSUPPORT > +_S(ERR_MAP(EAFNOSUPPORT), N_("Address family not supported by protocol")) > +#endif > +#ifdef EADDRINUSE > +_S(ERR_MAP(EADDRINUSE), N_("Address already in use")) > +#endif > +#ifdef EADDRNOTAVAIL > +_S(ERR_MAP(EADDRNOTAVAIL), N_("Cannot assign requested address")) > +#endif > +#ifdef ENETDOWN > +_S(ERR_MAP(ENETDOWN), N_("Network is down")) > +#endif > +#ifdef ENETUNREACH > +_S(ERR_MAP(ENETUNREACH), N_("Network is unreachable")) > +#endif > +#ifdef ENETRESET > +_S(ERR_MAP(ENETRESET), N_("Network dropped connection on reset")) > +#endif > +#ifdef ECONNABORTED > +_S(ERR_MAP(ECONNABORTED), N_("Software caused connection abort")) > +#endif > +#ifdef ECONNRESET > +_S(ERR_MAP(ECONNRESET), N_("Connection reset by peer")) > +#endif > +#ifdef ENOBUFS > +_S(ERR_MAP(ENOBUFS), N_("No buffer space available")) > +#endif > +#ifdef EISCONN > +_S(ERR_MAP(EISCONN), N_("Transport endpoint is already connected")) > +#endif > +#ifdef ENOTCONN > +_S(ERR_MAP(ENOTCONN), N_("Transport endpoint is not connected")) > +#endif > +#ifdef EDESTADDRREQ > +_S(ERR_MAP(EDESTADDRREQ), N_("Destination address required")) > +#endif > +#ifdef ESHUTDOWN > +_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 > +_S(ERR_MAP(ETIMEDOUT), N_("Connection timed out")) > +#endif > +#ifdef ECONNREFUSED > +_S(ERR_MAP(ECONNREFUSED), N_("Connection refused")) > +#endif > +#ifdef ELOOP > +_S(ERR_MAP(ELOOP), N_("Too many levels of symbolic links")) > +#endif > +#ifdef ENAMETOOLONG > +_S(ERR_MAP(ENAMETOOLONG), N_("File name too long")) > +#endif > +#ifdef EHOSTDOWN > +_S(ERR_MAP(EHOSTDOWN), N_("Host is down")) > +#endif > +#ifdef EHOSTUNREACH > +_S(ERR_MAP(EHOSTUNREACH), N_("No route to host")) > +#endif > +#ifdef ENOTEMPTY > +_S(ERR_MAP(ENOTEMPTY), N_("Directory not empty")) > +#endif > +#ifdef EUSERS > +_S(ERR_MAP(EUSERS), N_("Too many users")) > +#endif > +#ifdef EDQUOT > +_S(ERR_MAP(EDQUOT), N_("Disk quota exceeded")) > +#endif > +#ifdef ESTALE > +_S(ERR_MAP(ESTALE), N_("Stale file handle")) > +#endif > +#ifdef EREMOTE > +_S(ERR_MAP(EREMOTE), N_("Object is remote")) > +#endif > +#ifdef ENOLCK > +_S(ERR_MAP(ENOLCK), N_("No locks available")) > +#endif > +#ifdef ENOSYS > +_S(ERR_MAP(ENOSYS), N_("Function not implemented")) > +#endif > +#ifdef EILSEQ > +_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 > +_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 > +_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 > +_S(ERR_MAP(EDIED), N_("Translator died")) > +#endif > +#ifdef ERPCMISMATCH > +_S(ERR_MAP(ERPCMISMATCH), N_("RPC version wrong")) > +#endif > +#ifdef EGREGIOUS > +_S(ERR_MAP(EGREGIOUS), N_("You really blew it this time")) > +#endif > +#ifdef EPROCLIM > +_S(ERR_MAP(EPROCLIM), N_("Too many processes")) > +#endif > +#ifdef EGRATUITOUS > +_S(ERR_MAP(EGRATUITOUS), N_("Gratuitous error")) > +#endif > +#if defined (ENOTSUP) && ENOTSUP != EOPNOTSUPP > +_S(ERR_MAP(ENOTSUP), N_("Not supported")) > +#endif > +#ifdef EPROGMISMATCH > +_S(ERR_MAP(EPROGMISMATCH), N_("RPC program version wrong")) > +#endif > +#ifdef EBACKGROUND > +_S(ERR_MAP(EBACKGROUND), N_("Inappropriate operation for background process")) > +#endif > +#ifdef EIEIO > +_S(ERR_MAP(EIEIO), N_("Computer bought the farm")) > +#endif > +#if defined (EWOULDBLOCK) && EWOULDBLOCK != EAGAIN > +_S(ERR_MAP(EWOULDBLOCK), N_("Operation would block")) > +#endif > +#ifdef ENEEDAUTH > +_S(ERR_MAP(ENEEDAUTH), N_("Need authenticator")) > +#endif > +#ifdef ED > +_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 }, OK. > }; > 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 9a58dda9f2..c35f783e2a 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; OK. Less magic is better. > 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 { OK. > 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 OK. > diff --git a/sysdeps/unix/sysv/linux/bits/sys_errlist.h b/sysdeps/unix/sysv/linux/errlist-compat.c > similarity index 56% > rename from sysdeps/unix/sysv/linux/bits/sys_errlist.h > rename to 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 OK. > 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 OK. > 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 > similarity index 69% > rename from bits/sys_errlist.h > rename to 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 > OK.
On 02/07/2020 15:48, Carlos O'Donell wrote: > On 6/19/20 9:43 AM, Adhemerval Zanella wrote: >> The symbol is deprecated by strerror since its usage imposes some issues >> such as copy relocations. > > Agreed, thanks for deprecating this. > >> Its internal name is also changed to _sys_errlist_internal to avoid >> static linking usage. The compat code is also refactored by removing >> the over enginered errlist-compat.c generation from manual entried and >> extra comment token in linker script file. It disantangle the code >> generation from manual and simplify both Linux and Hurd compat code. >> >> The definitions from errlist.c are moved to errlist.h and a new test >> is added to avoid a new errno entry without an associated one in manual. >> >> Checked on x86_64-linux-gnu and i686-linux-gnu. I also run a check-abi >> on all affected platforms. > > OK for master if you copy all TRANS statements into C-style comments > in the final committed version of errlist.h, these are special comments > processed by po/Makefile instructions to gettext. > > I verified that libc.pot regeneration catches all the translations > in errlist.h (but the translation helper text in TRANS is missing as > noted). Ack, I have copied all the TRANS comment of the new sysdeps/gnu/errlist.h. >> diff --git a/NEWS b/NEWS >> index 0f5fa0f3b1..df03a34657 100644 >> --- a/NEWS >> +++ b/NEWS >> @@ -57,6 +57,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. > > OK. Thanks for that. > > Likewise see my note about updating packaging change notes in the wiki for > the release such that we have a summary for downstream maintainers that may > need to fix distro software. While they might read the NEWS it's easier to > point them at a detailed list of packaging changes that we write (and the > audience for those is downstream distro maintainers rather than the more > generic NEWS information). Ack, I have added a note and I plan to extend it once I go in the extension review. > >> diff --git a/sysdeps/gnu/errlist.h b/sysdeps/gnu/errlist.h >> new file mode 100644 >> index 0000000000..d4c857b9a9 >> --- /dev/null >> +++ b/sysdeps/gnu/errlist.h >> @@ -0,0 +1,448 @@ >> +#ifndef ERR_MAP >> +#define ERR_MAP(value) value > > Please move all of the TRANS entries into this file as C-style comments. > > They are required information for the accurate translation of the strings. Ack, I have added them.
diff --git a/NEWS b/NEWS index 0f5fa0f3b1..df03a34657 100644 --- a/NEWS +++ b/NEWS @@ -57,6 +57,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 0a8d66b846..8f15eb7e56 100644 --- a/stdio-common/Makefile +++ b/stdio-common/Makefile @@ -84,6 +84,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) @@ -128,6 +130,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..d4c857b9a9 --- /dev/null +++ b/sysdeps/gnu/errlist.h @@ -0,0 +1,448 @@ +#ifndef ERR_MAP +#define ERR_MAP(value) value +#endif +_S(ERR_MAP(0), N_("Success")) +#ifdef EPERM +_S(ERR_MAP(EPERM), N_("Operation not permitted")) +#endif +#ifdef ENOENT +_S(ERR_MAP(ENOENT), N_("No such file or directory")) +#endif +#ifdef ESRCH +_S(ERR_MAP(ESRCH), N_("No such process")) +#endif +#ifdef EINTR +_S(ERR_MAP(EINTR), N_("Interrupted system call")) +#endif +#ifdef EIO +_S(ERR_MAP(EIO), N_("Input/output error")) +#endif +#ifdef ENXIO +_S(ERR_MAP(ENXIO), N_("No such device or address")) +#endif +#ifdef E2BIG +_S(ERR_MAP(E2BIG), N_("Argument list too long")) +#endif +#ifdef ENOEXEC +_S(ERR_MAP(ENOEXEC), N_("Exec format error")) +#endif +#ifdef EBADF +_S(ERR_MAP(EBADF), N_("Bad file descriptor")) +#endif +#ifdef ECHILD +_S(ERR_MAP(ECHILD), N_("No child processes")) +#endif +#ifdef EDEADLK +_S(ERR_MAP(EDEADLK), N_("Resource deadlock avoided")) +#endif +#ifdef ENOMEM +_S(ERR_MAP(ENOMEM), N_("Cannot allocate memory")) +#endif +#ifdef EACCES +_S(ERR_MAP(EACCES), N_("Permission denied")) +#endif +#ifdef EFAULT +_S(ERR_MAP(EFAULT), N_("Bad address")) +#endif +#ifdef ENOTBLK +_S(ERR_MAP(ENOTBLK), N_("Block device required")) +#endif +#ifdef EBUSY +_S(ERR_MAP(EBUSY), N_("Device or resource busy")) +#endif +#ifdef EEXIST +_S(ERR_MAP(EEXIST), N_("File exists")) +#endif +#ifdef EXDEV +_S(ERR_MAP(EXDEV), N_("Invalid cross-device link")) +#endif +#ifdef ENODEV +_S(ERR_MAP(ENODEV), N_("No such device")) +#endif +#ifdef ENOTDIR +_S(ERR_MAP(ENOTDIR), N_("Not a directory")) +#endif +#ifdef EISDIR +_S(ERR_MAP(EISDIR), N_("Is a directory")) +#endif +#ifdef EINVAL +_S(ERR_MAP(EINVAL), N_("Invalid argument")) +#endif +#ifdef EMFILE +_S(ERR_MAP(EMFILE), N_("Too many open files")) +#endif +#ifdef ENFILE +_S(ERR_MAP(ENFILE), N_("Too many open files in system")) +#endif +#ifdef ENOTTY +_S(ERR_MAP(ENOTTY), N_("Inappropriate ioctl for device")) +#endif +#ifdef ETXTBSY +_S(ERR_MAP(ETXTBSY), N_("Text file busy")) +#endif +#ifdef EFBIG +_S(ERR_MAP(EFBIG), N_("File too large")) +#endif +#ifdef ENOSPC +_S(ERR_MAP(ENOSPC), N_("No space left on device")) +#endif +#ifdef ESPIPE +_S(ERR_MAP(ESPIPE), N_("Illegal seek")) +#endif +#ifdef EROFS +_S(ERR_MAP(EROFS), N_("Read-only file system")) +#endif +#ifdef EMLINK +_S(ERR_MAP(EMLINK), N_("Too many links")) +#endif +#ifdef EPIPE +_S(ERR_MAP(EPIPE), N_("Broken pipe")) +#endif +#ifdef EDOM +_S(ERR_MAP(EDOM), N_("Numerical argument out of domain")) +#endif +#ifdef ERANGE +_S(ERR_MAP(ERANGE), N_("Numerical result out of range")) +#endif +#ifdef EAGAIN +_S(ERR_MAP(EAGAIN), N_("Resource temporarily unavailable")) +#endif +#ifdef EINPROGRESS +_S(ERR_MAP(EINPROGRESS), N_("Operation now in progress")) +#endif +#ifdef EALREADY +_S(ERR_MAP(EALREADY), N_("Operation already in progress")) +#endif +#ifdef ENOTSOCK +_S(ERR_MAP(ENOTSOCK), N_("Socket operation on non-socket")) +#endif +#ifdef EMSGSIZE +_S(ERR_MAP(EMSGSIZE), N_("Message too long")) +#endif +#ifdef EPROTOTYPE +_S(ERR_MAP(EPROTOTYPE), N_("Protocol wrong type for socket")) +#endif +#ifdef ENOPROTOOPT +_S(ERR_MAP(ENOPROTOOPT), N_("Protocol not available")) +#endif +#ifdef EPROTONOSUPPORT +_S(ERR_MAP(EPROTONOSUPPORT), N_("Protocol not supported")) +#endif +#ifdef ESOCKTNOSUPPORT +_S(ERR_MAP(ESOCKTNOSUPPORT), N_("Socket type not supported")) +#endif +#ifdef EOPNOTSUPP +_S(ERR_MAP(EOPNOTSUPP), N_("Operation not supported")) +#endif +#ifdef EPFNOSUPPORT +_S(ERR_MAP(EPFNOSUPPORT), N_("Protocol family not supported")) +#endif +#ifdef EAFNOSUPPORT +_S(ERR_MAP(EAFNOSUPPORT), N_("Address family not supported by protocol")) +#endif +#ifdef EADDRINUSE +_S(ERR_MAP(EADDRINUSE), N_("Address already in use")) +#endif +#ifdef EADDRNOTAVAIL +_S(ERR_MAP(EADDRNOTAVAIL), N_("Cannot assign requested address")) +#endif +#ifdef ENETDOWN +_S(ERR_MAP(ENETDOWN), N_("Network is down")) +#endif +#ifdef ENETUNREACH +_S(ERR_MAP(ENETUNREACH), N_("Network is unreachable")) +#endif +#ifdef ENETRESET +_S(ERR_MAP(ENETRESET), N_("Network dropped connection on reset")) +#endif +#ifdef ECONNABORTED +_S(ERR_MAP(ECONNABORTED), N_("Software caused connection abort")) +#endif +#ifdef ECONNRESET +_S(ERR_MAP(ECONNRESET), N_("Connection reset by peer")) +#endif +#ifdef ENOBUFS +_S(ERR_MAP(ENOBUFS), N_("No buffer space available")) +#endif +#ifdef EISCONN +_S(ERR_MAP(EISCONN), N_("Transport endpoint is already connected")) +#endif +#ifdef ENOTCONN +_S(ERR_MAP(ENOTCONN), N_("Transport endpoint is not connected")) +#endif +#ifdef EDESTADDRREQ +_S(ERR_MAP(EDESTADDRREQ), N_("Destination address required")) +#endif +#ifdef ESHUTDOWN +_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 +_S(ERR_MAP(ETIMEDOUT), N_("Connection timed out")) +#endif +#ifdef ECONNREFUSED +_S(ERR_MAP(ECONNREFUSED), N_("Connection refused")) +#endif +#ifdef ELOOP +_S(ERR_MAP(ELOOP), N_("Too many levels of symbolic links")) +#endif +#ifdef ENAMETOOLONG +_S(ERR_MAP(ENAMETOOLONG), N_("File name too long")) +#endif +#ifdef EHOSTDOWN +_S(ERR_MAP(EHOSTDOWN), N_("Host is down")) +#endif +#ifdef EHOSTUNREACH +_S(ERR_MAP(EHOSTUNREACH), N_("No route to host")) +#endif +#ifdef ENOTEMPTY +_S(ERR_MAP(ENOTEMPTY), N_("Directory not empty")) +#endif +#ifdef EUSERS +_S(ERR_MAP(EUSERS), N_("Too many users")) +#endif +#ifdef EDQUOT +_S(ERR_MAP(EDQUOT), N_("Disk quota exceeded")) +#endif +#ifdef ESTALE +_S(ERR_MAP(ESTALE), N_("Stale file handle")) +#endif +#ifdef EREMOTE +_S(ERR_MAP(EREMOTE), N_("Object is remote")) +#endif +#ifdef ENOLCK +_S(ERR_MAP(ENOLCK), N_("No locks available")) +#endif +#ifdef ENOSYS +_S(ERR_MAP(ENOSYS), N_("Function not implemented")) +#endif +#ifdef EILSEQ +_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 +_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 +_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 +_S(ERR_MAP(EDIED), N_("Translator died")) +#endif +#ifdef ERPCMISMATCH +_S(ERR_MAP(ERPCMISMATCH), N_("RPC version wrong")) +#endif +#ifdef EGREGIOUS +_S(ERR_MAP(EGREGIOUS), N_("You really blew it this time")) +#endif +#ifdef EPROCLIM +_S(ERR_MAP(EPROCLIM), N_("Too many processes")) +#endif +#ifdef EGRATUITOUS +_S(ERR_MAP(EGRATUITOUS), N_("Gratuitous error")) +#endif +#if defined (ENOTSUP) && ENOTSUP != EOPNOTSUPP +_S(ERR_MAP(ENOTSUP), N_("Not supported")) +#endif +#ifdef EPROGMISMATCH +_S(ERR_MAP(EPROGMISMATCH), N_("RPC program version wrong")) +#endif +#ifdef EBACKGROUND +_S(ERR_MAP(EBACKGROUND), N_("Inappropriate operation for background process")) +#endif +#ifdef EIEIO +_S(ERR_MAP(EIEIO), N_("Computer bought the farm")) +#endif +#if defined (EWOULDBLOCK) && EWOULDBLOCK != EAGAIN +_S(ERR_MAP(EWOULDBLOCK), N_("Operation would block")) +#endif +#ifdef ENEEDAUTH +_S(ERR_MAP(ENEEDAUTH), N_("Need authenticator")) +#endif +#ifdef ED +_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 9a58dda9f2..c35f783e2a 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 similarity index 56% rename from sysdeps/unix/sysv/linux/bits/sys_errlist.h rename to 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 similarity index 69% rename from bits/sys_errlist.h rename to 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