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