From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) by sourceware.org (Postfix) with ESMTP id 2DF9B3870840 for ; Tue, 12 May 2020 17:39:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 2DF9B3870840 Received: from mail-qt1-f198.google.com (mail-qt1-f198.google.com [209.85.160.198]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-55-TOroFeE4MPa_1kiCX03s0w-1; Tue, 12 May 2020 13:39:12 -0400 X-MC-Unique: TOroFeE4MPa_1kiCX03s0w-1 Received: by mail-qt1-f198.google.com with SMTP id e44so14917735qta.9 for ; Tue, 12 May 2020 10:39:12 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:organization :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=VRA9rl3NVNKuEu42527+0jojsZv0ejuYmYO9gMKZ3uo=; b=F6DU3SCoFzxSsVv2x08px2Cni0EPOR0LKstxOFDUT4QZoMjAQTpk9CHxnRIocIcax8 4J27GUnWico1TEFcQOXkTHMxbj0eESUupJxJYy6iIugGV9Wq/+vUH5u1GVusVNda5xsY Rc4/lMNw9jg9oNAqelaw/7pHGi1TLOgiMarJ9MA1qcum/4L7r5jRiT758JB6wLNNWx3m sQF6HnV0mc46makDhZVGADnbHvWFAZZtIlCCj5yH+r2H82XsGUQbvHh/eoHY7GDZS49g e744UDr4kJR7X5vJoJ8yLSkrAxdap0PXbGz1vajdHWUBLRGs1ix9q5LNLnuuOrveWWwU 2gcQ== X-Gm-Message-State: AGi0PubvIkN8tVRpnAneKzbnZaSMm19R3kQ1mkmmqJ78H6J0x1q0PT/N Rv22ZELXcP+VLLQwxApaAfHI6VxqYdpq3cn/V9Js8eqaVKIHDV3zN7MyPbhadeLZeFNdDwUo1L3 mA4FEWjRdCEAEfaTHqY1I X-Received: by 2002:ac8:424b:: with SMTP id r11mr14621162qtm.171.1589305149213; Tue, 12 May 2020 10:39:09 -0700 (PDT) X-Google-Smtp-Source: APiQypIVGkyqr3JPMfk2rdtwkxQpEOI8JozqIiujam+r0gLGUdPxjMbAttsypuclm+Izysi+514MvQ== X-Received: by 2002:ac8:424b:: with SMTP id r11mr14620950qtm.171.1589305146678; Tue, 12 May 2020 10:39:06 -0700 (PDT) Received: from [192.168.1.4] (198-84-170-103.cpe.teksavvy.com. [198.84.170.103]) by smtp.gmail.com with ESMTPSA id l24sm12466168qtp.8.2020.05.12.10.39.04 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 12 May 2020 10:39:05 -0700 (PDT) Subject: Re: [PATCH v2 3/5] signal: Move sys_errlist to a compat symbol To: Adhemerval Zanella , libc-alpha@sourceware.org References: <20200507142319.1978172-1-adhemerval.zanella@linaro.org> <20200507142319.1978172-3-adhemerval.zanella@linaro.org> From: Carlos O'Donell Organization: Red Hat Message-ID: <571c66ad-8e9f-3e5c-3825-017c386c68f9@redhat.com> Date: Tue, 12 May 2020 13:39:04 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <20200507142319.1978172-3-adhemerval.zanella@linaro.org> Content-Language: en-US X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-13.7 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 May 2020 17:39:26 -0000 On 5/7/20 10:23 AM, Adhemerval Zanella via Libc-alpha wrote: > Changes from previous version: > > - Fixed NEWS entry to indicate the symbol are define in stdio.h. > > - Added a test to check if a new errno entry is also defined in > the manual. > > - Remove sys_errlist.h. > I'm reviewing. In the meantime testing on 64-bit and 32-bit x86 was clean. Tested-by: Carlos O'Donell > -- > > The symbol is deprecated by strerror and its usage imposes some issues > such as copy relocations. > > Its internal names is changed to _sys_errlist_internal to avoid static > linking usage. The compat code is also refactored by removing the over > enginered errlist-compat.c generation from manual entried and extra > comment token in linker script file. It disantangle the code generation > from manual and simplify both Linux and Hurd compat code. > > A new test is added to avoid a new errno addition without an associated > entry in manual. > > The error list (errlist.h) is now generated from processing a new > errlist.def by scripts/gen-errlist.py. The auto-generation is to > simplify the new test and avoid requiring either parsing a C file > to obtain the errno definitions or add a runtime check. > > Checked on x86_64-linux-gnu and i686-linux-gnu. I also run a check-abi > on all affected platforms. > --- > NEWS | 6 + > include/stdio.h | 2 +- > libio/Makefile | 2 +- > libio/stdio.h | 6 - > scripts/build-many-glibcs.py | 3 +- > scripts/gen-errlist.py | 53 + > stdio-common/Makefile | 19 + > stdio-common/errlist-compat.c | 1 + > stdio-common/errlist.c | 23 +- > stdio-common/errlist.def | 12 + > stdio-common/tst-errno-manual.py | 66 + > string/_strerror.c | 4 +- > string/strerror_l.c | 6 +- > sysdeps/gnu/Makefile | 43 - > sysdeps/gnu/errlist-compat.awk | 133 -- > sysdeps/gnu/errlist.awk | 110 -- > sysdeps/gnu/errlist.c | 1495 ----------------- > sysdeps/mach/hurd/errlist.c | 16 +- > sysdeps/mach/hurd/errlist.def | 104 ++ > sysdeps/unix/sysv/linux/Versions | 10 - > sysdeps/unix/sysv/linux/alpha/Versions | 12 - > .../unix/sysv/linux/alpha/errlist-compat.c | 43 + > .../{bits/sys_errlist.h => errlist-compat.c} | 29 +- > sysdeps/unix/sysv/linux/errlist-compat.h | 43 + > sysdeps/unix/sysv/linux/errlist.def | 133 ++ > sysdeps/unix/sysv/linux/hppa/Versions | 10 - > sysdeps/unix/sysv/linux/hppa/errlist-compat.c | 39 + > sysdeps/unix/sysv/linux/mips/Versions | 7 - > .../unix/sysv/linux/mips/errlist-compat.c | 14 +- > sysdeps/unix/sysv/linux/sparc/Versions | 10 - > .../unix/sysv/linux/sparc/errlist-compat.c | 43 + > 31 files changed, 616 insertions(+), 1881 deletions(-) > create mode 100755 scripts/gen-errlist.py > create mode 100644 stdio-common/errlist-compat.c > create mode 100644 stdio-common/errlist.def > create mode 100755 stdio-common/tst-errno-manual.py > delete mode 100644 sysdeps/gnu/errlist-compat.awk > delete mode 100644 sysdeps/gnu/errlist.awk > delete mode 100644 sysdeps/gnu/errlist.c > create mode 100644 sysdeps/mach/hurd/errlist.def > create mode 100644 sysdeps/unix/sysv/linux/alpha/errlist-compat.c > rename sysdeps/unix/sysv/linux/{bits/sys_errlist.h => errlist-compat.c} (56%) > create mode 100644 sysdeps/unix/sysv/linux/errlist-compat.h > create mode 100644 sysdeps/unix/sysv/linux/errlist.def > create mode 100644 sysdeps/unix/sysv/linux/hppa/errlist-compat.c > rename bits/sys_errlist.h => sysdeps/unix/sysv/linux/mips/errlist-compat.c (69%) > create mode 100644 sysdeps/unix/sysv/linux/sparc/errlist-compat.c > > diff --git a/NEWS b/NEWS > index 055248928d..66622f5c15 100644 > --- a/NEWS > +++ b/NEWS > @@ -41,6 +41,12 @@ Deprecated and removed features, and other changes affecting compatibility: > compatibility symbols to support old binaries. All programs should use > strsignal instead. > > +* The deprecated sys_errlist, _sys_errlist, sys_nerr, and _sys_nerr symbols > + are non longer available to newly linked binaries, and their declarations > + have removed from from . 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..3f65b7930c 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 int _sys_nerr_internal 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 21ef36ae70..d34a5b48b5 100644 > --- a/libio/stdio.h > +++ b/libio/stdio.h > @@ -778,12 +778,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 > - > > #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 4832912b28..3ca93543c0 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/scripts/gen-errlist.py b/scripts/gen-errlist.py > new file mode 100755 > index 0000000000..6531d0f3df > --- /dev/null > +++ b/scripts/gen-errlist.py > @@ -0,0 +1,53 @@ > +#!/usr/bin/python3 > +# Generate the errlist.h for errlist.c. > +# 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 > +# . > + > +import sys > +import argparse > + > +# The input file should be in the form > +# > +# VALUE, DESCRIPTION > +# > +# An entry for each will be created in the output file in the form: > +# > +# [VALUE] = "DESCRIPTION", > + > +def generate_errlist(input_file, output_file): > + with open(input_file, 'r') as fin, open(output_file, 'w') as fout: > + fout.write("#ifndef ERR_MAP\n") > + fout.write("#define ERR_MAP(value) value\n") > + fout.write("#endif\n") > + for line in fin: > + if line.lstrip().startswith('#'): > + continue > + fields = [f.strip() for f in line.rstrip('\n').split(',')] > + fout.write("[ERR_MAP(%s)] = N_(\"%s\"),\n" % (fields[0], > + fields[1])) > + > +def main(): > + parser = argparse.ArgumentParser(description='Generate errlist.h') > + parser.add_argument('-i', dest='input', metavar='FILE', > + help='Error definitions') > + parser.add_argument('-o', dest='output', metavar='FILE', > + help='Include file') > + args = parser.parse_args() > + generate_errlist(args.input, args.output) > + > +if __name__ == '__main__': > + main() > diff --git a/stdio-common/Makefile b/stdio-common/Makefile > index 0a8d66b846..3eea3659ec 100644 > --- a/stdio-common/Makefile > +++ b/stdio-common/Makefile > @@ -84,8 +84,19 @@ 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 > > +errlist-def = $(firstword $(wildcard $(addsuffix /errlist.def,$(sysdirs) .))) > + > +$(objpfx)errlist.h: $(errlist-def) \ > + $(..)scripts/gen-errlist.py > + $(PYTHON) $(..)scripts/gen-errlist.py -i $(errlist-def) -o $@ > + > +$(foreach o,$(object-suffixes) $(object-suffixes:=.d),\ > + $(objpfx)errlist$o): $(objpfx)errlist.h > + > ifeq ($(run-built-tests),yes) > LOCALES := de_DE.ISO-8859-1 de_DE.UTF-8 en_US.ISO-8859-1 ja_JP.EUC-JP > include ../gen-locales.mk > @@ -128,6 +139,14 @@ $(objpfx)tst-%-mem.out: $(objpfx)tst-%.out > $(common-objpfx)malloc/mtrace $(objpfx)tst-$*.mtrace > $@; \ > $(evaluate-test) > > +$(objpfx)tst-errno-manual.out: tst-errno-manual.py \ > + $(errlist-def) \ > + $(..)manual/errno.texi > + $(test-wrapper-env) $(py-env) \ > + $(PYTHON) tst-errno-manual.py -m $(..)manual/errno.texi \ > + -e $(errlist-def) > $@; \ > + $(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..f7a49fbf35 100644 > --- a/stdio-common/errlist.c > +++ b/stdio-common/errlist.c > @@ -15,22 +15,17 @@ > License along with the GNU C Library; if not, see > . */ > > +#include > +#include > +#include > #include > -#include > > -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 */ > +/* This file is auto-generated from errlist.def. */ > +#include > }; > > -const int _sys_nerr = array_length (_sys_errlist); > +const int _sys_nerr_internal = array_length (_sys_errlist_internal); > + > +#include > diff --git a/stdio-common/errlist.def b/stdio-common/errlist.def > new file mode 100644 > index 0000000000..165e206981 > --- /dev/null > +++ b/stdio-common/errlist.def > @@ -0,0 +1,12 @@ > +# Used by scripts/gen-errlist.py to generate errlist.h. > +0, Error > +EDOM, Argument out of function's domain > +ERANGE, Result out of range > +ENOSYS, Operation not implemented > +EINVAL, Invalid argument > +ESPIPE, Illegal seek > +EBADF, Bad file descriptor > +ENOMEM, Cannot allocate memory > +EACCES, Permission denied > +ENFILE, Too many open files in system > +EMFILE, Too many open files > diff --git a/stdio-common/tst-errno-manual.py b/stdio-common/tst-errno-manual.py > new file mode 100755 > index 0000000000..b95cd235fd > --- /dev/null > +++ b/stdio-common/tst-errno-manual.py > @@ -0,0 +1,66 @@ > +#!/usr/bin/python3 > +# Check is errno definition are present in manual documentation. > +# 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 > +# . > + > +import argparse > +import sys > +import re > + > +RE_ERRLIST = re.compile( > + r'(E[a-zA-Z0-9]+)') > + > +RE_MANUAL = re.compile( > + r'(?:^@errno){(\w+)') > + > +PASS=0 > +FAIL=1 > + > +def parse_file(r, f, idx): > + ret = [] > + for line in f: > + m = r.search(line) > + if not m: > + continue > + ret.append(m.group(idx)) > + return ret > + > +def check_errno_definitions(manual_fname, errlist_fname): > + with open(manual_fname, 'r') as mfile, open(errlist_fname, 'r') as efile: > + merr = parse_file(RE_MANUAL, mfile, 1) > + eerr = parse_file(RE_ERRLIST, efile, 0) > + 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..985fd4e3c6 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)) > + if (__glibc_unlikely (errnum < 0 || errnum >= _sys_nerr_internal > + || _sys_errlist_internal[errnum] == 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. */ > diff --git a/string/strerror_l.c b/string/strerror_l.c > index c8c3d4a6ef..40e7d0e896 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)) > + if (__glibc_unlikely (errnum < 0 || errnum >= _sys_nerr_internal > + || _sys_errlist_internal[errnum] == NULL)) > { > free (last_value); > if (__asprintf (&last_value, "%s%d", > 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 > # . > > -# 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 > -# . > - > -# > -# 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 \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 \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 > -# . > - > -# 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 "; > - print "#include "; > - 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 "; > - 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 "; > - 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 > -#include > - > -#ifndef ERR_REMAP > -# define ERR_REMAP(n) n > -#endif > - > -#if !defined EMIT_ERR_MAX && !defined ERRLIST_NO_COMPAT > -# include > -#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 > -#endif > - > -#ifdef EMIT_ERR_MAX > -void dummy (void) > -{ asm volatile (" @@@ %0 @@@ " : : "i" (ERR_REMAP (ERR_MAX))); } > -#endif > diff --git a/sysdeps/mach/hurd/errlist.c b/sysdeps/mach/hurd/errlist.c > index 451e8fa1eb..b6b0a03fbe 100644 > --- a/sysdeps/mach/hurd/errlist.c > +++ b/sysdeps/mach/hurd/errlist.c > @@ -18,11 +18,17 @@ > /* 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 > +#include > #include > -#define ERR_REMAP(n) (err_get_code (n)) > +#include > > -#include > +#define ERR_MAP(value) err_get_code (value) > + > +const char *const _hurd_errlist[] = > + { > +#include > + }; > + > +const int _hurd_nerr = array_length (_hurd_errlist); > diff --git a/sysdeps/mach/hurd/errlist.def b/sysdeps/mach/hurd/errlist.def > new file mode 100644 > index 0000000000..a6f769d4f3 > --- /dev/null > +++ b/sysdeps/mach/hurd/errlist.def > @@ -0,0 +1,104 @@ > +0, Success > +ENOENT, No such file or directory > +ESRCH, No such process > +EINTR, Interrupted system call > +EIO, Input/output error > +ENXIO, No such device or address > +E2BIG, Argument list too long > +ENOEXEC, Exec format error > +EBADF, Bad file descriptor > +ECHILD, No child processes > +EDEADLK, Resource deadlock avoided > +ENOMEM, Cannot allocate memory > +EACCES, Permission denied > +EFAULT, Bad address > +ENOTBLK, Block device required > +EBUSY, Device or resource busy > +EEXIST, File exists > +EXDEV, Invalid cross-device link > +ENODEV, No such device > +ENOTDIR, Not a directory > +EISDIR, Is a directory > +EINVAL, Invalid argument > +EMFILE, Too many open files > +ENFILE, Too many open files in system > +ENOTTY, Inappropriate ioctl for device > +ETXTBSY, Text file busy > +EFBIG, File too large > +ENOSPC, No space left on device > +ESPIPE, Illegal seek > +EROFS, Read-only file system > +EMLINK, Too many links > +EPIPE, Broken pipe > +EDOM, Numerical argument out of domain > +ERANGE, Numerical result out of range > +EAGAIN, Resource temporarily unavailable > +EWOULDBLOCK, Operation would block > +EINPROGRESS, Operation now in progress > +EALREADY, Operation already in progress > +ENOTSOCK, Socket operation on non-socket > +EMSGSIZE, Message too long > +EPROTOTYPE, Protocol wrong type for socket > +ENOPROTOOPT, Protocol not available > +EPROTONOSUPPORT, Protocol not supported > +ESOCKTNOSUPPORT, Socket type not supported > +EOPNOTSUPP, Operation not supported > +EPFNOSUPPORT, Protocol family not supported > +EAFNOSUPPORT, Address family not supported by protocol > +EADDRINUSE, Address already in use > +EADDRNOTAVAIL, Cannot assign requested address > +ENETDOWN, Network is down > +ENETUNREACH, Network is unreachable > +ENETRESET, Network dropped connection on reset > +ECONNABORTED, Software caused connection abort > +ECONNRESET, Connection reset by peer > +ENOBUFS, No buffer space available > +EISCONN, Transport endpoint is already connected > +ENOTCONN, Transport endpoint is not connected > +EDESTADDRREQ, Destination address required > +ESHUTDOWN, Cannot send after transport endpoint shutdown > +ETOOMANYREFS, Too many references: cannot splice > +ETIMEDOUT, Connection timed out > +ECONNREFUSED, Connection refused > +ELOOP, Too many levels of symbolic links > +ENAMETOOLONG, File name too long > +EHOSTDOWN, Host is down > +EHOSTUNREACH, No route to host > +ENOTEMPTY, Directory not empty > +EPROCLIM, Too many processes > +EUSERS, Too many users > +EDQUOT, Disk quota exceeded > +ESTALE, Stale file handle > +EREMOTE, Object is remote > +EBADRPC, RPC struct is bad > +ERPCMISMATCH, RPC version wrong > +EPROGUNAVAIL, RPC program not available > +EPROGMISMATCH, RPC program version wrong > +EPROCUNAVAIL, RPC bad procedure for program > +ENOLCK, No locks available > +EFTYPE, Inappropriate file type or format > +EAUTH, Authentication error > +ENEEDAUTH, Need authenticator > +ENOSYS, Function not implemented > +ENOTSUP, Not supported > +EILSEQ, Invalid or incomplete multibyte or wide character > +EBACKGROUND, Inappropriate operation for background process > +EDIED, Translator died > +ED, ? > +EGREGIOUS, You really blew it this time > +EIEIO, Computer bought the farm > +EGRATUITOUS, Gratuitous error > +EBADMSG, Bad message > +EIDRM, Identifier removed > +EMULTIHOP, Multihop attempted > +ENODATA, No data available > +ENOLINK, Link has been severed > +ENOMSG, No message of desired type > +ENOSR, Out of streams resources > +ENOSTR, Device not a stream > +EOVERFLOW, Value too large for defined data type > +EPROTO, Protocol error > +ETIME, Timer expired > +ECANCELED, Operation canceled > +EOWNERDEAD, Owner died > +ENOTRECOVERABLE, State not recoverable > diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions > index 9a58dda9f2..c35f783e2a 100644 > --- a/sysdeps/unix/sysv/linux/Versions > +++ b/sysdeps/unix/sysv/linux/Versions > @@ -1,9 +1,4 @@ > libc { > - # The comment lines with "#errlist-compat" are magic; see errlist-compat.awk. > - # When you get an error from errlist-compat.awk, you need to add a new > - # version here. Don't do this blindly, since this means changing the ABI > - # for all GNU/Linux configurations. > - > GLIBC_2.0 { > # functions used in inline functions or macros > __cmsg_nxthdr; > @@ -56,7 +51,6 @@ libc { > # u* > umount; uselib; > > - #errlist-compat 123 > _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; > } > GLIBC_2.1 { > @@ -84,7 +78,6 @@ libc { > # u* > umount2; > > - #errlist-compat 125 > _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; > } > GLIBC_2.2 { > @@ -102,7 +95,6 @@ libc { > # r* > readahead; > > - #errlist-compat 126 > _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; > } > GLIBC_2.3.2 { > @@ -120,7 +112,6 @@ libc { > > unshare; > > - #errlist-compat 132 > _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; > } > GLIBC_2.5 { > @@ -142,7 +133,6 @@ libc { > fallocate; > } > GLIBC_2.12 { > - #errlist-compat 135 > _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; > > ntp_gettimex; > diff --git a/sysdeps/unix/sysv/linux/alpha/Versions b/sysdeps/unix/sysv/linux/alpha/Versions > index 3b7971c2a3..b90d5f2e5a 100644 > --- a/sysdeps/unix/sysv/linux/alpha/Versions > +++ b/sysdeps/unix/sysv/linux/alpha/Versions > @@ -1,12 +1,5 @@ > libc { > - # The comment lines with "#errlist-compat" are magic; see > - # sysdeps/gnu/errlist-compat.awk. > - # When you get an error from errlist-compat.awk, you need to add a new > - # version here. Don't do this blindly, since this means changing the ABI > - # for all GNU/Linux configurations. > - > GLIBC_2.0 { > - #errlist-compat 131 > _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; > > # Unfortunately in wider use. > @@ -33,7 +26,6 @@ libc { > pciconfig_read; pciconfig_write; sethae; > } > GLIBC_2.1 { > - #errlist-compat 131 > _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; > > # Linux/Alpha 64-bit timeval functions. > @@ -70,19 +62,15 @@ libc { > wordexp; > } > GLIBC_2.3 { > - #errlist-compat 132 > _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; > } > GLIBC_2.4 { > - #errlist-compat 138 > _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; > } > GLIBC_2.12 { > - #errlist-compat 139 > _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; > } > GLIBC_2.16 { > - #errlist-compat 140 > _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; > } > GLIBC_2.27 { > diff --git a/sysdeps/unix/sysv/linux/alpha/errlist-compat.c b/sysdeps/unix/sysv/linux/alpha/errlist-compat.c > new file mode 100644 > index 0000000000..709807aa6b > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/alpha/errlist-compat.c > @@ -0,0 +1,43 @@ > +/* Linux sys_errlist compat symbol definitions. Alpha version. > + Copyright (C) 2020 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + . */ > + > +#include > + > +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) > +DEFINE_COMPAT_ERRLIST (131, GLIBC_2_0) > +#endif > + > +#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_3) > +DEFINE_COMPAT_ERRLIST (131, GLIBC_2_1) > +#endif > + > +#if SHLIB_COMPAT (libc, GLIBC_2_3, GLIBC_2_4) > +DEFINE_COMPAT_ERRLIST (132, GLIBC_2_3) > +#endif > + > +#if SHLIB_COMPAT (libc, GLIBC_2_4, GLIBC_2_12) > +DEFINE_COMPAT_ERRLIST (138, GLIBC_2_4) > +#endif > + > +#if SHLIB_COMPAT (libc, GLIBC_2_12, GLIBC_2_16) > +DEFINE_COMPAT_ERRLIST (139, GLIBC_2_12) > +#endif > + > +#if SHLIB_COMPAT (libc, GLIBC_2_16, GLIBC_2_32) > +DEFINE_COMPAT_ERRLIST (140, GLIBC_2_16) > +#endif > diff --git a/sysdeps/unix/sysv/linux/bits/sys_errlist.h b/sysdeps/unix/sysv/linux/errlist-compat.c > similarity index 56% > rename from sysdeps/unix/sysv/linux/bits/sys_errlist.h > rename to sysdeps/unix/sysv/linux/errlist-compat.c > index d6f5fa0a5e..c4d79b70aa 100644 > --- a/sysdeps/unix/sysv/linux/bits/sys_errlist.h > +++ b/sysdeps/unix/sysv/linux/errlist-compat.c > @@ -1,5 +1,5 @@ > -/* Declare sys_errlist and sys_nerr, or don't. Compatibility (do) version. > - Copyright (C) 2002-2020 Free Software Foundation, Inc. > +/* Linux sys_errlist compat symbol definitions. Generic version. > + Copyright (C) 2020 Free Software Foundation, Inc. > This file is part of the GNU C Library. > > The GNU C Library is free software; you can redistribute it and/or > @@ -16,17 +16,24 @@ > License along with the GNU C Library; if not, see > . */ > > -#ifndef _STDIO_H > -# error "Never include directly; use instead." > +#include > + > +#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 > + . */ > + > +#ifndef _ERRLIST_COMPAT_H > +#define _ERRLIST_COMPAT_H > + > +#include > + > +/* 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/errlist.def b/sysdeps/unix/sysv/linux/errlist.def > new file mode 100644 > index 0000000000..39be2eba83 > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/errlist.def > @@ -0,0 +1,133 @@ > +# Used by scripts/gen-errlist.py to generate errlist.h. > +0, Success > +EPERM, Operation not permitted > +ENOENT, No such file or directory > +ESRCH, No such process > +EINTR, Interrupted system call > +EIO, Input/output error > +ENXIO, No such device or address > +E2BIG, Argument list too long > +ENOEXEC, Exec format error > +EBADF, Bad file descriptor > +ECHILD, No child processes > +EDEADLK, Resource deadlock avoided > +ENOMEM, Cannot allocate memory > +EACCES, Permission denied > +EFAULT, Bad address > +ENOTBLK, Block device required > +EBUSY, Device or resource busy > +EEXIST, File exists > +EXDEV, Invalid cross-device link > +ENODEV, No such device > +ENOTDIR, Not a directory > +EISDIR, Is a directory > +EINVAL, Invalid argument > +EMFILE, Too many open files > +ENFILE, Too many open files in system > +ENOTTY, Inappropriate ioctl for device > +ETXTBSY, Text file busy > +EFBIG, File too large > +ENOSPC, No space left on device > +ESPIPE, Illegal seek > +EROFS, Read-only file system > +EMLINK, Too many links > +EPIPE, Broken pipe > +EDOM, Numerical argument out of domain > +ERANGE, Numerical result out of range > +EAGAIN, Resource temporarily unavailable > +EINPROGRESS, Operation now in progress > +EALREADY, Operation already in progress > +ENOTSOCK, Socket operation on non-socket > +EMSGSIZE, Message too long > +EPROTOTYPE, Protocol wrong type for socket > +ENOPROTOOPT, Protocol not available > +EPROTONOSUPPORT, Protocol not supported > +ESOCKTNOSUPPORT, Socket type not supported > +EOPNOTSUPP, Operation not supported > +EPFNOSUPPORT, Protocol family not supported > +EAFNOSUPPORT, Address family not supported by protocol > +EADDRINUSE, Address already in use > +EADDRNOTAVAIL, Cannot assign requested address > +ENETDOWN, Network is down > +ENETUNREACH, Network is unreachable > +ENETRESET, Network dropped connection on reset > +ECONNABORTED, Software caused connection abort > +ECONNRESET, Connection reset by peer > +ENOBUFS, No buffer space available > +EISCONN, Transport endpoint is already connected > +ENOTCONN, Transport endpoint is not connected > +EDESTADDRREQ, Destination address required > +ESHUTDOWN, Cannot send after transport endpoint shutdown > +ETOOMANYREFS, Too many references: cannot splice > +ETIMEDOUT, Connection timed out > +ECONNREFUSED, Connection refused > +ELOOP, Too many levels of symbolic links > +ENAMETOOLONG, File name too long > +EHOSTDOWN, Host is down > +EHOSTUNREACH, No route to host > +ENOTEMPTY, Directory not empty > +EUSERS, Too many users > +EDQUOT, Disk quota exceeded > +ESTALE, Stale file handle > +EREMOTE, Object is remote > +ENOLCK, No locks available > +ENOSYS, Function not implemented > +EILSEQ, Invalid or incomplete multibyte or wide character > +EBADMSG, Bad message > +EIDRM, Identifier removed > +EMULTIHOP, Multihop attempted > +ENODATA, No data available > +ENOLINK, Link has been severed > +ENOMSG, No message of desired type > +ENOSR, Out of streams resources > +ENOSTR, Device not a stream > +EOVERFLOW, Value too large for defined data type > +EPROTO, Protocol error > +ETIME, Timer expired > +ECANCELED, Operation canceled > +EOWNERDEAD, Owner died > +ENOTRECOVERABLE, State not recoverable > +ERESTART, Interrupted system call should be restarted > +ECHRNG, Channel number out of range > +EL2NSYNC, Level 2 not synchronized > +EL3HLT, Level 3 halted > +EL3RST, Level 3 reset > +ELNRNG, Link number out of range > +EUNATCH, Protocol driver not attached > +ENOCSI, No CSI structure available > +EL2HLT, Level 2 halted > +EBADE, Invalid exchange > +EBADR, Invalid request descriptor > +EXFULL, Exchange full > +ENOANO, No anode > +EBADRQC, Invalid request code > +EBADSLT, Invalid slot > +EBFONT, Bad font file format > +ENONET, Machine is not on the network > +ENOPKG, Package not installed > +EADV, Advertise error > +ESRMNT, Srmount error > +ECOMM, Communication error on send > +EDOTDOT, RFS specific error > +ENOTUNIQ, Name not unique on network > +EBADFD, File descriptor in bad state > +EREMCHG, Remote address changed > +ELIBACC, Can not access a needed shared library > +ELIBBAD, Accessing a corrupted shared library > +ELIBSCN, .lib section in a.out corrupted > +ELIBMAX, Attempting to link in too many shared libraries > +ELIBEXEC, Cannot exec a shared library directly > +ESTRPIPE, Streams pipe error > +EUCLEAN, Structure needs cleaning > +ENOTNAM, Not a XENIX named type file > +ENAVAIL, No XENIX semaphores available > +EISNAM, Is a named type file > +EREMOTEIO, Remote I/O error > +ENOMEDIUM, No medium found > +EMEDIUMTYPE, Wrong medium type > +ENOKEY, Required key not available > +EKEYEXPIRED, Key has expired > +EKEYREVOKED, Key has been revoked > +EKEYREJECTED, Key was rejected by service > +ERFKILL, Operation not possible due to RF-kill > +EHWPOISON, Memory page has hardware error > 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 > + . */ > + > +#include > + > +#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_3) > +DEFINE_COMPAT_ERRLIST (253, GLIBC_2_1) > +#endif > + > +#if SHLIB_COMPAT (libc, GLIBC_2_3, GLIBC_2_4) > +DEFINE_COMPAT_ERRLIST (254, GLIBC_2_3) > +#endif > + > +#if SHLIB_COMPAT (libc, GLIBC_2_4, GLIBC_2_12) > +DEFINE_COMPAT_ERRLIST (256, GLIBC_2_4) > +#endif > + > +#if SHLIB_COMPAT (libc, GLIBC_2_12, GLIBC_2_17) > +DEFINE_COMPAT_ERRLIST (257, GLIBC_2_12) > +#endif > + > +#if SHLIB_COMPAT (libc, GLIBC_2_17, GLIBC_2_32) > +DEFINE_COMPAT_ERRLIST (260, GLIBC_2_17) > +#endif > diff --git a/sysdeps/unix/sysv/linux/mips/Versions b/sysdeps/unix/sysv/linux/mips/Versions > index 453f276aad..0ec82dc480 100644 > --- a/sysdeps/unix/sysv/linux/mips/Versions > +++ b/sysdeps/unix/sysv/linux/mips/Versions > @@ -5,13 +5,7 @@ ld { > } > } > libc { > - # The comment lines with "#errlist-compat" are magic; see errlist-compat.awk. > - # When you get an error from errlist-compat.awk, you need to add a new > - # version here. Don't do this blindly, since this means changing the ABI > - # for all GNU/Linux configurations. > - > GLIBC_2.0 { > - #errlist-compat 123 > _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; > > # Exception handling support functions from libgcc > @@ -28,7 +22,6 @@ libc { > sysmips; > } > GLIBC_2.2 { > - #errlist-compat 1134 > _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; > > # _* > diff --git a/bits/sys_errlist.h b/sysdeps/unix/sysv/linux/mips/errlist-compat.c > similarity index 69% > rename from bits/sys_errlist.h > rename to sysdeps/unix/sysv/linux/mips/errlist-compat.c > index 40425a74c3..b720db9244 100644 > --- a/bits/sys_errlist.h > +++ b/sysdeps/unix/sysv/linux/mips/errlist-compat.c > @@ -1,5 +1,5 @@ > -/* Declare sys_errlist and sys_nerr, or don't. Don't version. > - Copyright (C) 2002-2020 Free Software Foundation, Inc. > +/* Linux sys_errlist compat symbol definitions. MIPS version. > + Copyright (C) 2020 Free Software Foundation, Inc. > This file is part of the GNU C Library. > > The GNU C Library is free software; you can redistribute it and/or > @@ -16,8 +16,12 @@ > License along with the GNU C Library; if not, see > . */ > > -#ifndef _STDIO_H > -# error "Never include directly; use instead." > +#include > + > +#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 > + . */ > + > +#include > + > +#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 > -- Cheers, Carlos.