From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from eggs.gnu.org (eggs.gnu.org [IPv6:2001:470:142:3::10]) by sourceware.org (Postfix) with ESMTPS id B31513858C78 for ; Sat, 20 May 2023 16:15:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B31513858C78 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gnu.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gnu.org Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q0PF8-0000dW-22; Sat, 20 May 2023 12:15:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=In-Reply-To:MIME-Version:References:Subject:To:From: Date; bh=8d96qee5Jzy68t+GIxrPyKFVmbhYjG3JCScZvKc7E94=; b=GlapA4ECVNVvpFy9d4zY Pximj0hweporQzQzloNHt8aqjnxfay/m50ISKYaTCOrgouwNcGrvRpuIoqgF9h9XrrjZIAx3GhgwN h004zTRtL+2Exm74c2WAfsymepiFHzYKuHbRAPAKrSEToCDtI2TuyqhiMluKwKiYQouEX7pg7tJMb PCf15rIJ70NmksAQ2C8naw+9+CT5VNOH65M+mVEfKJT7YHFW5wMigwi+p47DgBQS65JTfd4Ivz+Om Eaa1B6luOyv0hyindYZVyrF1gaF5JpPK1U/LZeu/GFan1ZtVfQ0U3e6d0/hKX8+6xvTXEvP3uNSop uwbLfy5sYvGvvA==; Received: from 2a02-8440-521d-0057-de41-a9ff-fe47-ec49.rev.sfr.net ([2a02:8440:521d:57:de41:a9ff:fe47:ec49] helo=begin) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q0PF0-0002MZ-SP; Sat, 20 May 2023 12:15:41 -0400 Received: from samy by begin with local (Exim 4.96) (envelope-from ) id 1q0PEq-008KAv-2h; Sat, 20 May 2023 18:15:24 +0200 Date: Sat, 20 May 2023 18:15:24 +0200 From: Samuel Thibault To: Sergey Bugaev Cc: libc-alpha@sourceware.org, bug-hurd@gnu.org Subject: Re: [PATCH 1/3] hurd: Use __hurd_fail () instead of assigning errno Message-ID: <20230520161524.kt7d54un2fwfsqpn@begin> Mail-Followup-To: Sergey Bugaev , libc-alpha@sourceware.org, bug-hurd@gnu.org References: <20230520115531.3911877-1-bugaevc@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20230520115531.3911877-1-bugaevc@gmail.com> Organization: I am not organized User-Agent: NeoMutt/20170609 (1.8.3) X-Spam-Status: No, score=-12.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Applied, thanks! Sergey Bugaev, le sam. 20 mai 2023 14:55:29 +0300, a ecrit: > The __hurd_fail () inline function is the dedicated, idiomatic way of > reporting errors in the Hurd part of glibc. Not only is it more concise > than '{ errno = err; return -1; }', it is since commit > 6639cc10029e24e06b34e169712b21c31b8cf213 > "hurd: Mark error functions as __COLD" marked with the cold attribute, > telling the compiler that this codepath is unlikely to be executed. > > In one case, use __hurd_dfail () over the plain __hurd_fail (). > > Signed-off-by: Sergey Bugaev > --- > hurd/alloc-fd.c | 13 +++++-------- > hurd/fopenport.c | 5 +---- > hurd/getdport.c | 12 +++--------- > hurd/hurdselect.c | 13 +++---------- > hurd/hurdsock.c | 7 ++----- > sysdeps/mach/hurd/brk.c | 7 ++----- > sysdeps/mach/hurd/closedir.c | 5 +---- > sysdeps/mach/hurd/cthreads.c | 12 +++++------- > sysdeps/mach/hurd/dirfd.c | 6 ++---- > sysdeps/mach/hurd/dl-sysdep.c | 14 ++++---------- > sysdeps/mach/hurd/dup3.c | 2 +- > sysdeps/mach/hurd/f_setlk.c | 10 ++++------ > sysdeps/mach/hurd/fcntl.c | 23 +++++++---------------- > sysdeps/mach/hurd/fdopendir.c | 10 ++-------- > sysdeps/mach/hurd/getcwd.c | 10 ++-------- > sysdeps/mach/hurd/getegid.c | 12 +++--------- > sysdeps/mach/hurd/getentropy.c | 15 +++++---------- > sysdeps/mach/hurd/geteuid.c | 12 +++--------- > sysdeps/mach/hurd/getgid.c | 12 +++--------- > sysdeps/mach/hurd/getlogin.c | 5 +---- > sysdeps/mach/hurd/getlogin_r.c | 7 ++----- > sysdeps/mach/hurd/getrlimit.c | 5 +---- > sysdeps/mach/hurd/getuid.c | 12 +++--------- > sysdeps/mach/hurd/i386/sigreturn.c | 5 +---- > sysdeps/mach/hurd/if_index.c | 11 ++++------- > sysdeps/mach/hurd/ifreq.c | 2 +- > sysdeps/mach/hurd/libc_sigaction.c | 5 +---- > sysdeps/mach/hurd/lseek.c | 6 ++---- > sysdeps/mach/hurd/mknodat.c | 5 +---- > sysdeps/mach/hurd/mmap64.c | 8 +++----- > sysdeps/mach/hurd/opendir.c | 23 +++++++---------------- > sysdeps/mach/hurd/ptrace.c | 3 +-- > sysdeps/mach/hurd/ptsname.c | 12 +++--------- > sysdeps/mach/hurd/readdir.c | 6 ++---- > sysdeps/mach/hurd/readdir64.c | 5 +---- > sysdeps/mach/hurd/readdir64_r.c | 5 +---- > sysdeps/mach/hurd/sendmsg.c | 5 +---- > sysdeps/mach/hurd/setrlimit.c | 5 +---- > sysdeps/mach/hurd/sigaltstack.c | 3 +-- > sysdeps/mach/hurd/sigpending.c | 5 +---- > sysdeps/mach/hurd/sigprocmask.c | 3 +-- > sysdeps/mach/hurd/sigsuspend.c | 3 +-- > sysdeps/mach/hurd/spawni.c | 3 +-- > sysdeps/mach/hurd/statconv.c | 6 ++---- > sysdeps/mach/hurd/statfsconv.c | 6 ++---- > sysdeps/mach/hurd/ttyname_r.c | 5 +---- > sysdeps/mach/hurd/unlinkat.c | 5 +---- > sysdeps/mach/hurd/waitid.c | 8 ++------ > sysdeps/mach/hurd/x86_64/sigreturn.c | 5 +---- > 49 files changed, 109 insertions(+), 278 deletions(-) > > diff --git a/hurd/alloc-fd.c b/hurd/alloc-fd.c > index 60c8b008..4edc7421 100644 > --- a/hurd/alloc-fd.c > +++ b/hurd/alloc-fd.c > @@ -34,10 +34,7 @@ _hurd_alloc_fd (int *fd, int first_fd) > long int rlimit; > > if (first_fd < 0) > - { > - errno = EINVAL; > - return NULL; > - } > + return __hurd_fail (EINVAL), NULL; > > crit = _hurd_critical_section_lock (); > > @@ -99,7 +96,7 @@ _hurd_alloc_fd (int *fd, int first_fd) > if (size * sizeof (*_hurd_dtable) < size) > { > /* Integer overflow! */ > - errno = ENOMEM; > + __hurd_fail (ENOMEM); > goto out; > } > > @@ -124,13 +121,13 @@ _hurd_alloc_fd (int *fd, int first_fd) > goto search; > } > else > - errno = ENOMEM; > + __hurd_fail (ENOMEM); > } > else > - errno = EMFILE; > + __hurd_fail (EMFILE); > } > else > - errno = EINVAL; /* Bogus FIRST_FD value. */ > + __hurd_fail (EINVAL); /* Bogus FIRST_FD value. */ > > out: > __mutex_unlock (&_hurd_dtable_lock); > diff --git a/hurd/fopenport.c b/hurd/fopenport.c > index be6aa30c..a1efc542 100644 > --- a/hurd/fopenport.c > +++ b/hurd/fopenport.c > @@ -126,10 +126,7 @@ __fopenport (mach_port_t port, const char *mode) > > /* Check the access mode. */ > if ((pflags & needflags) != needflags) > - { > - errno = EBADF; > - return NULL; > - } > + return __hurd_fail (EBADF), NULL; > > return fopencookie ((void *) (uintptr_t) port, > mode, funcsio); > diff --git a/hurd/getdport.c b/hurd/getdport.c > index 2bccc597..27fc41f4 100644 > --- a/hurd/getdport.c > +++ b/hurd/getdport.c > @@ -35,18 +35,12 @@ __getdport (int fd) > so we don't bother allocating a real table. */ > > if (_hurd_init_dtable == NULL) > - { > - /* Never had a descriptor table. */ > - errno = EBADF; > - return MACH_PORT_NULL; > - } > + /* Never had a descriptor table. */ > + return __hurd_fail (EBADF), MACH_PORT_NULL; > > if (fd < 0 || (unsigned int) fd > _hurd_init_dtablesize > || _hurd_init_dtable[fd] == MACH_PORT_NULL) > - { > - errno = EBADF; > - return MACH_PORT_NULL; > - } > + return __hurd_fail (EBADF), MACH_PORT_NULL; > else > { > __mach_port_mod_refs (__mach_task_self (), _hurd_init_dtable[fd], > diff --git a/hurd/hurdselect.c b/hurd/hurdselect.c > index 9630cae4..94027639 100644 > --- a/hurd/hurdselect.c > +++ b/hurd/hurdselect.c > @@ -71,10 +71,7 @@ _hurd_select (int nfds, > struct hurd_sigstate *ss = NULL; > > if (nfds < 0 || (pollfds == NULL && nfds > FD_SETSIZE)) > - { > - errno = EINVAL; > - return -1; > - } > + return __hurd_fail (EINVAL); > > #define IO_SELECT_REPLY_MSGID (21012 + 100) /* XXX */ > #define IO_SELECT_TIMEOUT_REPLY_MSGID (21031 + 100) /* XXX */ > @@ -86,10 +83,7 @@ _hurd_select (int nfds, > struct timespec now; > > if (timeout->tv_sec < 0 || ! valid_nanoseconds (timeout->tv_nsec)) > - { > - errno = EINVAL; > - return -1; > - } > + return __hurd_fail (EINVAL); > > err = __clock_gettime (CLOCK_REALTIME, &now); > if (err) > @@ -281,8 +275,7 @@ _hurd_select (int nfds, > { > if (sigmask) > __sigprocmask (SIG_SETMASK, &oset, NULL); > - errno = EBADF; > - return -1; > + return __hurd_fail (EBADF); > } > > if (nfds > _hurd_dtablesize) > diff --git a/hurd/hurdsock.c b/hurd/hurdsock.c > index 58c27feb..1d04047a 100644 > --- a/hurd/hurdsock.c > +++ b/hurd/hurdsock.c > @@ -48,10 +48,7 @@ _hurd_socket_server (int domain, int dead) > socket_t server; > > if (domain < 0) > - { > - errno = EAFNOSUPPORT; > - return MACH_PORT_NULL; > - } > + return __hurd_fail (EAFNOSUPPORT), MACH_PORT_NULL; > > retry: > HURD_CRITICAL_BEGIN; > @@ -99,7 +96,7 @@ retry: > > if (server == MACH_PORT_NULL && errno == ENOENT) > /* If the server node is absent, we don't support that protocol. */ > - errno = EAFNOSUPPORT; > + __hurd_fail (EAFNOSUPPORT); > > __mutex_unlock (&lock); > HURD_CRITICAL_END; > diff --git a/sysdeps/mach/hurd/brk.c b/sysdeps/mach/hurd/brk.c > index 12aaba52..f1349495 100644 > --- a/sysdeps/mach/hurd/brk.c > +++ b/sysdeps/mach/hurd/brk.c > @@ -93,11 +93,8 @@ _hurd_set_brk (vm_address_t addr) > __mutex_unlock (&_hurd_rlimit_lock); > > if (addr - brk_start > rlimit) > - { > - /* Need to increase the resource limit. */ > - errno = ENOMEM; > - return -1; > - } > + /* Need to increase the resource limit. */ > + return __hurd_fail (ENOMEM); > > if (pagend > _hurd_data_end) > { > diff --git a/sysdeps/mach/hurd/closedir.c b/sysdeps/mach/hurd/closedir.c > index 3a16418f..46815f05 100644 > --- a/sysdeps/mach/hurd/closedir.c > +++ b/sysdeps/mach/hurd/closedir.c > @@ -32,10 +32,7 @@ __closedir (DIR *dirp) > error_t err; > > if (dirp == NULL) > - { > - errno = EINVAL; > - return -1; > - } > + return __hurd_fail (EINVAL); > > __libc_lock_lock (dirp->__lock); > err = __vm_deallocate (__mach_task_self (), > diff --git a/sysdeps/mach/hurd/cthreads.c b/sysdeps/mach/hurd/cthreads.c > index 87b6c06b..4f5920bc 100644 > --- a/sysdeps/mach/hurd/cthreads.c > +++ b/sysdeps/mach/hurd/cthreads.c > @@ -17,6 +17,7 @@ > > #include > #include > +#include > #include > #include > > @@ -25,9 +26,8 @@ int > weak_function > __cthread_keycreate (__cthread_key_t *key) > { > - __set_errno (ENOSYS); > - *key = -1; > - return -1; > + *key = -1; > + return __hurd_fail (ENOSYS); > } > > /* Placeholder for key retrieval routine from Hurd cthreads library. */ > @@ -36,8 +36,7 @@ weak_function > __cthread_getspecific (__cthread_key_t key, void **pval) > { > *pval = NULL; > - __set_errno (ENOSYS); > - return -1; > + return __hurd_fail (ENOSYS); > } > > /* Placeholder for key setting routine from Hurd cthreads library. */ > @@ -45,6 +44,5 @@ int > weak_function > __cthread_setspecific (__cthread_key_t key, void *val) > { > - __set_errno (ENOSYS); > - return -1; > + return __hurd_fail (ENOSYS); > } > diff --git a/sysdeps/mach/hurd/dirfd.c b/sysdeps/mach/hurd/dirfd.c > index 9520f3ef..2cf02c78 100644 > --- a/sysdeps/mach/hurd/dirfd.c > +++ b/sysdeps/mach/hurd/dirfd.c > @@ -18,6 +18,7 @@ > > #include > #include > +#include > #include > #include > > @@ -32,10 +33,7 @@ __dirfd (DIR *dirp) > if (_hurd_dtable[fd] == dirp->__fd) > break; > if (fd == _hurd_dtablesize) > - { > - errno = EINVAL; > - fd = -1; > - } > + fd = __hurd_fail (EINVAL); > __mutex_unlock (&_hurd_dtable_lock); > HURD_CRITICAL_END; > > diff --git a/sysdeps/mach/hurd/dl-sysdep.c b/sysdeps/mach/hurd/dl-sysdep.c > index af1ae142..42add605 100644 > --- a/sysdeps/mach/hurd/dl-sysdep.c > +++ b/sysdeps/mach/hurd/dl-sysdep.c > @@ -285,8 +285,7 @@ open_file (const char *file_name, int flags, > MACH_PORT_RIGHT_SEND, +1); > return _dl_hurd_data->dtable[fd]; > } > - errno = EBADF; > - return MACH_PORT_NULL; > + return __hurd_fail (EBADF), MACH_PORT_NULL; > } > > assert (!(flags & ~(O_READ | O_EXEC | O_CLOEXEC | O_IGNORE_CTTY))); > @@ -403,10 +402,7 @@ __ssize_t weak_function __TEXT_STARTUP > __writev (int fd, const struct iovec *iov, int niov) > { > if (fd >= _hurd_init_dtablesize) > - { > - errno = EBADF; > - return -1; > - } > + return __hurd_fail (EBADF); > > int i; > size_t total = 0; > @@ -554,8 +550,7 @@ check_no_hidden(__access); > int weak_function __TEXT_STARTUP > __access (const char *file, int type) > { > - errno = ENOSYS; > - return -1; > + return __hurd_fail (ENOSYS); > } > check_no_hidden(__access_noerrno); > int weak_function __TEXT_STARTUP > @@ -697,8 +692,7 @@ check_no_hidden(__getcwd); > char *weak_function __TEXT_STARTUP > __getcwd (char *buf, size_t size) > { > - errno = ENOSYS; > - return NULL; > + return __hurd_fail (ENOSYS), NULL; > } > > /* This is used by dl-tunables.c to strdup strings. We can just make this a > diff --git a/sysdeps/mach/hurd/dup3.c b/sysdeps/mach/hurd/dup3.c > index 0bcbbfd6..c5f64bce 100644 > --- a/sysdeps/mach/hurd/dup3.c > +++ b/sysdeps/mach/hurd/dup3.c > @@ -103,7 +103,7 @@ __dup3 (int fd, int fd2, int flags) > { > fd2 = -1; > if (errno == EINVAL) > - errno = EBADF; /* POSIX.1-1990 6.2.1.2 ll 54-55. */ > + __hurd_fail (EBADF); /* POSIX.1-1990 6.2.1.2 ll 54-55. */ > } > else > { > diff --git a/sysdeps/mach/hurd/f_setlk.c b/sysdeps/mach/hurd/f_setlk.c > index 5c60a634..9f1b0baa 100644 > --- a/sysdeps/mach/hurd/f_setlk.c > +++ b/sysdeps/mach/hurd/f_setlk.c > @@ -19,6 +19,7 @@ > #include > #include > #include > +#include > #include > #include > > @@ -39,8 +40,7 @@ __f_setlk (int fd, int type, int whence, __off64_t start, __off64_t len, int wai > case F_WRLCK: cmd = LOCK_EX; break; > case F_UNLCK: cmd = LOCK_UN; break; > default: > - errno = EINVAL; > - return -1; > + return __hurd_fail (EINVAL); > } > > if (cmd != LOCK_UN && wait == 0) > @@ -71,11 +71,9 @@ __f_setlk (int fd, int type, int whence, __off64_t start, __off64_t len, int wai > /* FALLTHROUGH */ > case SEEK_CUR: > case SEEK_END: > - errno = ENOTSUP; > - return -1; > + return __hurd_fail (ENOTSUP); > default: > - errno = EINVAL; > - return -1; > + return __hurd_fail (EINVAL); > } > > return __flock (fd, cmd); > diff --git a/sysdeps/mach/hurd/fcntl.c b/sysdeps/mach/hurd/fcntl.c > index a89d6d39..0b9a64bc 100644 > --- a/sysdeps/mach/hurd/fcntl.c > +++ b/sysdeps/mach/hurd/fcntl.c > @@ -48,8 +48,7 @@ __libc_fcntl (int fd, int cmd, ...) > error_t err; > > default: /* Bad command. */ > - errno = EINVAL; > - result = -1; > + result = __hurd_fail (EINVAL); > break; > > /* First the descriptor-based commands, which do no RPCs. */ > @@ -149,8 +148,7 @@ __libc_fcntl (int fd, int cmd, ...) > cmd = F_SETLKW64; > break; > default: > - errno = EINVAL; > - return -1; > + return __hurd_fail (EINVAL); > } > > struct flock64 fl64 = { > @@ -183,8 +181,7 @@ __libc_fcntl (int fd, int cmd, ...) > switch (cmd) > { > case F_GETLK64: > - errno = ENOSYS; > - return -1; > + return __hurd_fail (ENOSYS); > case F_SETLKW64: > wait = 1; > /* FALLTHROUGH */ > @@ -192,8 +189,7 @@ __libc_fcntl (int fd, int cmd, ...) > return __f_setlk (fd, fl->l_type, fl->l_whence, > fl->l_start, fl->l_len, wait); > default: > - errno = EINVAL; > - return -1; > + return __hurd_fail (EINVAL); > } > } > else if (cmd == F_GETLK64) > @@ -208,10 +204,7 @@ __libc_fcntl (int fd, int cmd, ...) > && fl->l_start != fl64.l_start) > || (sizeof fl->l_len != sizeof fl64.l_len > && fl->l_len != fl64.l_len)) > - { > - errno = EOVERFLOW; > - return -1; > - } > + return __hurd_fail (EOVERFLOW); > } > > result = err ? __hurd_dfail (fd, err) : 0; > @@ -246,8 +239,7 @@ __libc_fcntl (int fd, int cmd, ...) > switch (cmd) > { > case F_GETLK64: > - errno = ENOSYS; > - return -1; > + return __hurd_fail (ENOSYS); > case F_SETLKW64: > wait = 1; > /* FALLTHROUGH */ > @@ -255,8 +247,7 @@ __libc_fcntl (int fd, int cmd, ...) > return __f_setlk (fd, fl->l_type, fl->l_whence, > fl->l_start, fl->l_len, wait); > default: > - errno = EINVAL; > - return -1; > + return __hurd_fail (EINVAL); > } > } > > diff --git a/sysdeps/mach/hurd/fdopendir.c b/sysdeps/mach/hurd/fdopendir.c > index 2a152b07..33ea2f0c 100644 > --- a/sysdeps/mach/hurd/fdopendir.c > +++ b/sysdeps/mach/hurd/fdopendir.c > @@ -31,10 +31,7 @@ __fdopendir (int fd) > struct hurd_fd *d = _hurd_fd_get (fd); > > if (d == NULL) > - { > - errno = EBADF; > - return NULL; > - } > + return __hurd_fail (EBADF), NULL; > > /* Ensure that it's a directory. */ > error_t err = HURD_FD_PORT_USE > @@ -47,10 +44,7 @@ __fdopendir (int fd) > })); > > if (err) > - { > - errno = err; > - return NULL; > - } > + return __hurd_dfail (fd, err), NULL; > > return _hurd_fd_opendir (d); > } > diff --git a/sysdeps/mach/hurd/getcwd.c b/sysdeps/mach/hurd/getcwd.c > index cd3aedd9..b9a6f855 100644 > --- a/sysdeps/mach/hurd/getcwd.c > +++ b/sysdeps/mach/hurd/getcwd.c > @@ -69,10 +69,7 @@ __hurd_canonicalize_directory_name_internal (file_t thisdir, > if (size <= 0) > { > if (buf != NULL) > - { > - errno = EINVAL; > - return NULL; > - } > + return __hurd_fail (EINVAL), NULL; > > size = FILENAME_MAX * 4 + 1; /* Good starting guess. */ > } > @@ -227,10 +224,7 @@ __hurd_canonicalize_directory_name_internal (file_t thisdir, > if (offset < d->d_namlen + 1) > { > if (orig_size > 0) > - { > - errno = ERANGE; > - return NULL; > - } > + return __hurd_fail (ERANGE), NULL; > else > { > size *= 2; > diff --git a/sysdeps/mach/hurd/getegid.c b/sysdeps/mach/hurd/getegid.c > index 7f07d13b..9ca56e57 100644 > --- a/sysdeps/mach/hurd/getegid.c > +++ b/sysdeps/mach/hurd/getegid.c > @@ -32,21 +32,15 @@ retry: > __mutex_lock (&_hurd_id.lock); > > if (err = _hurd_check_ids ()) > - { > - errno = err; > - egid = -1; > - } > + egid = __hurd_fail (err); > else if (_hurd_id.gen.ngids >= 1) > egid = _hurd_id.gen.gids[0]; > else if (_hurd_id.aux.ngids >= 1) > /* We have no effective gids. Return the real gid. */ > egid = _hurd_id.aux.gids[0]; > else > - { > - /* We do not even have a real gid. */ > - errno = EGRATUITOUS; > - egid = -1; > - } > + /* We do not even have a real gid. */ > + egid = __hurd_fail (EGRATUITOUS); > > __mutex_unlock (&_hurd_id.lock); > HURD_CRITICAL_END; > diff --git a/sysdeps/mach/hurd/getentropy.c b/sysdeps/mach/hurd/getentropy.c > index adbbb78c..118f8984 100644 > --- a/sysdeps/mach/hurd/getentropy.c > +++ b/sysdeps/mach/hurd/getentropy.c > @@ -20,6 +20,7 @@ > #include > #include > #include > +#include > > /* Write LENGTH bytes of randomness starting at BUFFER. Return 0 on > success and -1 on failure. */ > @@ -29,10 +30,7 @@ getentropy (void *buffer, size_t length) > /* The interface is documented to return EIO for buffer lengths > longer than 256 bytes. */ > if (length > 256) > - { > - __set_errno (EIO); > - return -1; > - } > + return __hurd_fail (EIO); > > /* Try to fill the buffer completely. Even with the 256 byte limit > above, we might still receive an EINTR error (when blocking > @@ -51,12 +49,9 @@ getentropy (void *buffer, size_t length) > return -1; > } > if (bytes == 0) > - { > - /* No more bytes available. This should not happen under > - normal circumstances. */ > - __set_errno (EIO); > - return -1; > - } > + /* No more bytes available. This should not happen under > + normal circumstances. */ > + return __hurd_fail (EIO); > /* Try again in case of a short read. */ > buffer += bytes; > } > diff --git a/sysdeps/mach/hurd/geteuid.c b/sysdeps/mach/hurd/geteuid.c > index a50c514f..3548bdde 100644 > --- a/sysdeps/mach/hurd/geteuid.c > +++ b/sysdeps/mach/hurd/geteuid.c > @@ -32,21 +32,15 @@ retry: > __mutex_lock (&_hurd_id.lock); > > if (err = _hurd_check_ids ()) > - { > - errno = err; > - euid = -1; > - } > + euid = __hurd_fail (err); > else if (_hurd_id.gen.nuids >= 1) > euid = _hurd_id.gen.uids[0]; > else if (_hurd_id.aux.nuids >= 1) > /* We have no effective uids. Return the real uid. */ > euid = _hurd_id.aux.uids[0]; > else > - { > - /* We do not even have a real uid. */ > - errno = EGRATUITOUS; > - euid = -1; > - } > + /* We do not even have a real uid. */ > + euid = __hurd_fail (EGRATUITOUS); > > __mutex_unlock (&_hurd_id.lock); > HURD_CRITICAL_END; > diff --git a/sysdeps/mach/hurd/getgid.c b/sysdeps/mach/hurd/getgid.c > index f49e592f..62183074 100644 > --- a/sysdeps/mach/hurd/getgid.c > +++ b/sysdeps/mach/hurd/getgid.c > @@ -32,18 +32,12 @@ retry: > __mutex_lock (&_hurd_id.lock); > > if (err = _hurd_check_ids ()) > - { > - errno = err; > - gid = -1; > - } > + gid = __hurd_fail (err); > else if (_hurd_id.aux.ngids >= 1) > gid = _hurd_id.aux.gids[0]; > else > - { > - /* We do not even have a real gid. */ > - errno = EGRATUITOUS; > - gid = -1; > - } > + /* We do not even have a real gid. */ > + gid = __hurd_fail (EGRATUITOUS); > > __mutex_unlock (&_hurd_id.lock); > HURD_CRITICAL_END; > diff --git a/sysdeps/mach/hurd/getlogin.c b/sysdeps/mach/hurd/getlogin.c > index 336afaea..3f1b9a6f 100644 > --- a/sysdeps/mach/hurd/getlogin.c > +++ b/sysdeps/mach/hurd/getlogin.c > @@ -29,10 +29,7 @@ getlogin (void) > error_t err; > > if (err = __USEPORT (PROC, __proc_getlogin (port, login))) > - { > - errno = err; > - return NULL; > - } > + return __hurd_fail (err), NULL; > > return login; > } > diff --git a/sysdeps/mach/hurd/getlogin_r.c b/sysdeps/mach/hurd/getlogin_r.c > index 2e432251..c1a2f14e 100644 > --- a/sysdeps/mach/hurd/getlogin_r.c > +++ b/sysdeps/mach/hurd/getlogin_r.c > @@ -31,14 +31,11 @@ __getlogin_r (char *name, size_t name_len) > error_t err; > > if (err = __USEPORT (PROC, __proc_getlogin (port, login))) > - return errno = err; > + return __hurd_fail (err), err; > > size_t len = __strnlen (login, sizeof login - 1) + 1; > if (len > name_len) > - { > - errno = ERANGE; > - return errno; > - } > + return __hurd_fail (ERANGE), ERANGE; > > memcpy (name, login, len); > return 0; > diff --git a/sysdeps/mach/hurd/getrlimit.c b/sysdeps/mach/hurd/getrlimit.c > index 547d4e61..5744f67d 100644 > --- a/sysdeps/mach/hurd/getrlimit.c > +++ b/sysdeps/mach/hurd/getrlimit.c > @@ -28,10 +28,7 @@ __getrlimit (enum __rlimit_resource resource, struct rlimit *rlimits) > struct rlimit lim; > > if (rlimits == NULL || (unsigned int) resource >= RLIMIT_NLIMITS) > - { > - errno = EINVAL; > - return -1; > - } > + return __hurd_fail (EINVAL); > > HURD_CRITICAL_BEGIN; > __mutex_lock (&_hurd_rlimit_lock); > diff --git a/sysdeps/mach/hurd/getuid.c b/sysdeps/mach/hurd/getuid.c > index 267cbda9..fa778ebc 100644 > --- a/sysdeps/mach/hurd/getuid.c > +++ b/sysdeps/mach/hurd/getuid.c > @@ -32,18 +32,12 @@ retry: > __mutex_lock (&_hurd_id.lock); > > if (err = _hurd_check_ids ()) > - { > - errno = err; > - uid = -1; > - } > + uid = __hurd_fail (err); > else if (_hurd_id.aux.nuids >= 1) > uid = _hurd_id.aux.uids[0]; > else > - { > - /* We do not even have a real uid. */ > - errno = EGRATUITOUS; > - uid = -1; > - } > + /* We do not even have a real uid. */ > + uid = __hurd_fail (EGRATUITOUS); > > __mutex_unlock (&_hurd_id.lock); > HURD_CRITICAL_END; > diff --git a/sysdeps/mach/hurd/i386/sigreturn.c b/sysdeps/mach/hurd/i386/sigreturn.c > index 1686734d..64faa5d8 100644 > --- a/sysdeps/mach/hurd/i386/sigreturn.c > +++ b/sysdeps/mach/hurd/i386/sigreturn.c > @@ -84,10 +84,7 @@ __sigreturn (struct sigcontext *scp) > struct hurd_userlink *link = (void *) &scp[1]; > > if (__glibc_unlikely (scp == NULL || (scp->sc_mask & _SIG_CANT_MASK))) > - { > - errno = EINVAL; > - return -1; > - } > + return __hurd_fail (EINVAL); > > ss = _hurd_self_sigstate (); > _hurd_sigstate_lock (ss); > diff --git a/sysdeps/mach/hurd/if_index.c b/sysdeps/mach/hurd/if_index.c > index c8ad7e72..5c10da5d 100644 > --- a/sysdeps/mach/hurd/if_index.c > +++ b/sysdeps/mach/hurd/if_index.c > @@ -38,10 +38,7 @@ __if_nametoindex (const char *ifname) > return 0; > > if (strlen (ifname) >= IFNAMSIZ) > - { > - __set_errno (ENODEV); > - return 0; > - } > + return __hurd_fail (ENODEV), 0; > > strncpy (ifr.ifr_name, ifname, IFNAMSIZ); > if (__ioctl (fd, SIOCGIFINDEX, &ifr) < 0) > @@ -49,7 +46,7 @@ __if_nametoindex (const char *ifname) > int saved_errno = errno; > __close (fd); > if (saved_errno == EINVAL || saved_errno == ENOTTY) > - __set_errno (ENOSYS); > + __hurd_fail (ENOSYS); > return 0; > } > __close (fd); > @@ -180,9 +177,9 @@ __if_indextoname (unsigned int ifindex, char ifname[IF_NAMESIZE]) > int saved_errno = errno; > __close (fd); > if (saved_errno == EINVAL || saved_errno == ENOTTY) > - __set_errno (ENOSYS); > + __hurd_fail (ENOSYS); > else if (saved_errno == ENODEV) > - __set_errno (ENXIO); > + __hurd_fail (ENXIO); > return NULL; > } > __close (fd); > diff --git a/sysdeps/mach/hurd/ifreq.c b/sysdeps/mach/hurd/ifreq.c > index 394d020c..eec7dd80 100644 > --- a/sysdeps/mach/hurd/ifreq.c > +++ b/sysdeps/mach/hurd/ifreq.c > @@ -54,7 +54,7 @@ __ifreq (struct ifreq **ifreqs, int *num_ifs, int sockfd) > if (len % sizeof (struct ifreq) != 0) > { > __munmap (data, len); > - errno = EGRATUITOUS; > + __hurd_fail (EGRATUITOUS); > goto out; > } > *num_ifs = len / sizeof (struct ifreq); > diff --git a/sysdeps/mach/hurd/libc_sigaction.c b/sysdeps/mach/hurd/libc_sigaction.c > index 3053c7e7..748647e9 100644 > --- a/sysdeps/mach/hurd/libc_sigaction.c > +++ b/sysdeps/mach/hurd/libc_sigaction.c > @@ -33,10 +33,7 @@ __libc_sigaction (int sig, const struct sigaction *act, > > if (act != NULL && act->sa_handler != SIG_DFL > && ((__sigmask (sig) & _SIG_CANT_MASK) || act->sa_handler == SIG_ERR)) > - { > - errno = EINVAL; > - return -1; > - } > + return __hurd_fail (EINVAL); > > /* Copy so we fault before taking locks. */ > if (act != NULL) > diff --git a/sysdeps/mach/hurd/lseek.c b/sysdeps/mach/hurd/lseek.c > index 7b4e1289..0fe20e2a 100644 > --- a/sysdeps/mach/hurd/lseek.c > +++ b/sysdeps/mach/hurd/lseek.c > @@ -18,6 +18,7 @@ > #include > #include > #include > +#include > > /* Seek to OFFSET on FD, starting from WHENCE. */ > off_t > @@ -27,10 +28,7 @@ __libc_lseek (int fd, off_t offset, int whence) > off_t res = (off_t) res64; > > if (sizeof res != sizeof res64 && res != res64) > - { > - __set_errno (EOVERFLOW); > - return (off_t) -1; > - } > + return (off_t) __hurd_fail (EOVERFLOW); > > return res; > } > diff --git a/sysdeps/mach/hurd/mknodat.c b/sysdeps/mach/hurd/mknodat.c > index f3ccb869..67158e1b 100644 > --- a/sysdeps/mach/hurd/mknodat.c > +++ b/sysdeps/mach/hurd/mknodat.c > @@ -63,10 +63,7 @@ __mknodat (int fd, const char *path, mode_t mode, dev_t dev) > len = 0; > } > else > - { > - errno = EINVAL; > - return -1; > - } > + return __hurd_fail (EINVAL); > > if (translator != NULL && ! S_ISFIFO (mode)) > { > diff --git a/sysdeps/mach/hurd/mmap64.c b/sysdeps/mach/hurd/mmap64.c > index a838afd4..cafd0347 100644 > --- a/sysdeps/mach/hurd/mmap64.c > +++ b/sysdeps/mach/hurd/mmap64.c > @@ -19,6 +19,7 @@ > #include > #include > #include > +#include > > /* Map addresses starting near ADDR and extending for LEN bytes. From > OFFSET into the file FD describes according to PROT and FLAGS. If ADDR > @@ -36,11 +37,8 @@ __mmap64 (void *addr, size_t len, int prot, int flags, int fd, > vm_offset_t small_offset = (vm_offset_t) offset; > > if (small_offset != offset) > - { > - /* We cannot do this since the offset is too large. */ > - __set_errno (EOVERFLOW); > - return MAP_FAILED; > - } > + /* We cannot do this since the offset is too large. */ > + return __hurd_fail (EOVERFLOW), MAP_FAILED; > > return __mmap (addr, len, prot, flags, fd, small_offset); > } > diff --git a/sysdeps/mach/hurd/opendir.c b/sysdeps/mach/hurd/opendir.c > index a9e8f94d..07260d22 100644 > --- a/sysdeps/mach/hurd/opendir.c > +++ b/sysdeps/mach/hurd/opendir.c > @@ -40,10 +40,7 @@ _hurd_fd_opendir (struct hurd_fd *d) > DIR *dirp; > > if (d == NULL) > - { > - errno = EBADF; > - return NULL; > - } > + return __hurd_fail (EBADF), NULL; > > dirp = (DIR *) malloc (sizeof (DIR)); > if (dirp == NULL) > @@ -72,12 +69,9 @@ DIR * > __opendirat (int dfd, const char *name) > { > if (name[0] == '\0') > - { > - /* POSIX.1-1990 says an empty name gets ENOENT; > - but `open' might like it fine. */ > - __set_errno (ENOENT); > - return NULL; > - } > + /* POSIX.1-1990 says an empty name gets ENOENT; > + but `open' might like it fine. */ > + return __hurd_fail (ENOENT), NULL; > > int flags = O_RDONLY | O_NONBLOCK | O_DIRECTORY | O_CLOEXEC | O_IGNORE_CTTY; > int fd; > @@ -107,12 +101,9 @@ __opendir (const char *name) > return __opendirat (AT_FDCWD, name); > #else > if (name[0] == '\0') > - { > - /* POSIX.1-1990 says an empty name gets ENOENT; > - but `open' might like it fine. */ > - __set_errno (ENOENT); > - return NULL; > - } > + /* POSIX.1-1990 says an empty name gets ENOENT; > + but `open' might like it fine. */ > + return __hurd_fail (ENOENT), NULL; > > int fd = __open (name, O_RDONLY | O_NONBLOCK | O_DIRECTORY); > if (fd < 0) > diff --git a/sysdeps/mach/hurd/ptrace.c b/sysdeps/mach/hurd/ptrace.c > index b2efac07..97948d3f 100644 > --- a/sysdeps/mach/hurd/ptrace.c > +++ b/sysdeps/mach/hurd/ptrace.c > @@ -380,8 +380,7 @@ ptrace (enum __ptrace_request request, ... ) > } > > default: > - errno = EINVAL; > - return -1; > + return __hurd_fail (EINVAL); > } > > return 0; > diff --git a/sysdeps/mach/hurd/ptsname.c b/sysdeps/mach/hurd/ptsname.c > index f6ad9939..06234f53 100644 > --- a/sysdeps/mach/hurd/ptsname.c > +++ b/sysdeps/mach/hurd/ptsname.c > @@ -49,11 +49,8 @@ __ptsname_internal (int fd, char *buf, size_t buflen, struct stat64 *stp) > int ttype; > > if (HURD_DPORT_USE (fd, __term_get_bottom_type (port, &ttype)) == 0) > - { > - /* get_bottom_type suceeded, this is the slave side. */ > - errno = ENOTTY; > - return ENOTTY; > - } > + /* get_bottom_type suceeded, this is the slave side. */ > + return __hurd_fail (ENOTTY), ENOTTY; > > if (err = HURD_DPORT_USE (fd, __term_get_peername (port, peername))) > { > @@ -64,10 +61,7 @@ __ptsname_internal (int fd, char *buf, size_t buflen, struct stat64 *stp) > > len = __strnlen (peername, sizeof peername - 1) + 1; > if (len > buflen) > - { > - errno = ERANGE; > - return ERANGE; > - } > + return __hurd_fail (ERANGE), ERANGE; > > if (stp) > { > diff --git a/sysdeps/mach/hurd/readdir.c b/sysdeps/mach/hurd/readdir.c > index d52cfe7d..bf67823e 100644 > --- a/sysdeps/mach/hurd/readdir.c > +++ b/sysdeps/mach/hurd/readdir.c > @@ -21,6 +21,7 @@ > #include > #include > #include > +#include > > /* Read a directory entry from DIRP. */ > struct dirent * > @@ -52,10 +53,7 @@ __readdir (DIR *dirp) > - sizeof entry->d_ino); > const ino_t d_ino = entry64->d_ino; > if (d_ino != entry64->d_ino) > - { > - __set_errno (EOVERFLOW); > - return NULL; > - } > + return __hurd_fail (EOVERFLOW), NULL; > # if BYTE_ORDER != BIG_ENDIAN /* We just skipped over the zero high word. */ > entry->d_ino = d_ino; /* ... or the nonzero low word, swap it. */ > # endif > diff --git a/sysdeps/mach/hurd/readdir64.c b/sysdeps/mach/hurd/readdir64.c > index ceb7083e..2c01ca22 100644 > --- a/sysdeps/mach/hurd/readdir64.c > +++ b/sysdeps/mach/hurd/readdir64.c > @@ -29,10 +29,7 @@ __readdir64 (DIR *dirp) > struct dirent64 *dp; > > if (dirp == NULL) > - { > - errno = EINVAL; > - return NULL; > - } > + return __hurd_fail (EINVAL), NULL; > > __libc_lock_lock (dirp->__lock); > > diff --git a/sysdeps/mach/hurd/readdir64_r.c b/sysdeps/mach/hurd/readdir64_r.c > index 4f4252c2..fdfe498d 100644 > --- a/sysdeps/mach/hurd/readdir64_r.c > +++ b/sysdeps/mach/hurd/readdir64_r.c > @@ -31,10 +31,7 @@ __readdir64_r (DIR *dirp, struct dirent64 *entry, struct dirent64 **result) > error_t err = 0; > > if (dirp == NULL) > - { > - errno = EINVAL; > - return errno; > - } > + return __hurd_fail (EINVAL), EINVAL; > > __libc_lock_lock (dirp->__lock); > > diff --git a/sysdeps/mach/hurd/sendmsg.c b/sysdeps/mach/hurd/sendmsg.c > index 3c9cdc4e..7f86f60b 100644 > --- a/sysdeps/mach/hurd/sendmsg.c > +++ b/sysdeps/mach/hurd/sendmsg.c > @@ -82,10 +82,7 @@ __libc_sendmsg (int fd, const struct msghdr *message, int flags) > { > err = __vm_allocate (__mach_task_self (), &data.addr, len, 1); > if (err) > - { > - __set_errno (err); > - return -1; > - } > + return __hurd_fail (err); > dealloc = 1; > } > else > diff --git a/sysdeps/mach/hurd/setrlimit.c b/sysdeps/mach/hurd/setrlimit.c > index 7dc62e1e..f57439f3 100644 > --- a/sysdeps/mach/hurd/setrlimit.c > +++ b/sysdeps/mach/hurd/setrlimit.c > @@ -30,10 +30,7 @@ __setrlimit (enum __rlimit_resource resource, const struct rlimit *rlimits) > struct rlimit lim; > > if (rlimits == NULL || (unsigned int) resource >= RLIMIT_NLIMITS) > - { > - errno = EINVAL; > - return -1; > - } > + return __hurd_fail (EINVAL); > > lim = *rlimits; > > diff --git a/sysdeps/mach/hurd/sigaltstack.c b/sysdeps/mach/hurd/sigaltstack.c > index 8d5a2a8e..7431a11c 100644 > --- a/sysdeps/mach/hurd/sigaltstack.c > +++ b/sysdeps/mach/hurd/sigaltstack.c > @@ -42,8 +42,7 @@ __sigaltstack (const stack_t *argss, stack_t *oss) > { > /* Can't disable a stack that is in use. */ > __spin_unlock (&s->lock); > - errno = EINVAL; > - return -1; > + return __hurd_fail (EINVAL); > } > > old = s->sigaltstack; > diff --git a/sysdeps/mach/hurd/sigpending.c b/sysdeps/mach/hurd/sigpending.c > index 59078a3f..6a8d3b8b 100644 > --- a/sysdeps/mach/hurd/sigpending.c > +++ b/sysdeps/mach/hurd/sigpending.c > @@ -30,10 +30,7 @@ sigpending (sigset_t *set) > sigset_t pending; > > if (set == NULL) > - { > - errno = EINVAL; > - return -1; > - } > + return __hurd_fail (EINVAL); > > ss = _hurd_self_sigstate (); > _hurd_sigstate_lock (ss); > diff --git a/sysdeps/mach/hurd/sigprocmask.c b/sysdeps/mach/hurd/sigprocmask.c > index c7c5dfc3..d5309511 100644 > --- a/sysdeps/mach/hurd/sigprocmask.c > +++ b/sysdeps/mach/hurd/sigprocmask.c > @@ -58,8 +58,7 @@ __sigprocmask (int how, const sigset_t *set, sigset_t *oset) > > default: > _hurd_sigstate_unlock (ss); > - errno = EINVAL; > - return -1; > + return __hurd_fail (EINVAL); > } > > ss->blocked &= ~_SIG_CANT_MASK; > diff --git a/sysdeps/mach/hurd/sigsuspend.c b/sysdeps/mach/hurd/sigsuspend.c > index 85f3e78f..2dec3f91 100644 > --- a/sysdeps/mach/hurd/sigsuspend.c > +++ b/sysdeps/mach/hurd/sigsuspend.c > @@ -81,8 +81,7 @@ __sigsuspend (const sigset_t *set) > /* We've been interrupted! And a good thing, too. > Otherwise we'd never return. > That's right; this function always returns an error. */ > - errno = EINTR; > - return -1; > + return __hurd_fail (EINTR); > } > libc_hidden_def (__sigsuspend) > weak_alias (__sigsuspend, sigsuspend) > diff --git a/sysdeps/mach/hurd/spawni.c b/sysdeps/mach/hurd/spawni.c > index f45311a0..5e053080 100644 > --- a/sysdeps/mach/hurd/spawni.c > +++ b/sysdeps/mach/hurd/spawni.c > @@ -216,8 +216,7 @@ __spawni (pid_t *pid, const char *file, > MACH_PORT_RIGHT_SEND, +1); > return dtable[fd]; > } > - errno = EBADF; > - return MACH_PORT_NULL; > + return __hurd_fail (EBADF), MACH_PORT_NULL; > } > inline error_t child_lookup (const char *file, int oflag, mode_t mode, > file_t *result) > diff --git a/sysdeps/mach/hurd/statconv.c b/sysdeps/mach/hurd/statconv.c > index 306dde38..ae3950f1 100644 > --- a/sysdeps/mach/hurd/statconv.c > +++ b/sysdeps/mach/hurd/statconv.c > @@ -18,6 +18,7 @@ > > #include > #include > +#include > > static inline int > stat64_conv (struct stat *buf, const struct stat64 *buf64) > @@ -55,10 +56,7 @@ stat64_conv (struct stat *buf, const struct stat64 *buf64) > && buf->st_size != buf64->st_size) > || (sizeof buf->st_blocks != sizeof buf64->st_blocks > && buf->st_blocks != buf64->st_blocks)) > - { > - __set_errno (EOVERFLOW); > - return -1; > - } > + return __hurd_fail (EOVERFLOW); > > return 0; > } > diff --git a/sysdeps/mach/hurd/statfsconv.c b/sysdeps/mach/hurd/statfsconv.c > index f67d6b98..8a2051c2 100644 > --- a/sysdeps/mach/hurd/statfsconv.c > +++ b/sysdeps/mach/hurd/statfsconv.c > @@ -18,6 +18,7 @@ > > #include > #include > +#include > > static inline int > statfs64_conv (struct statfs *buf, const struct statfs64 *buf64) > @@ -25,10 +26,7 @@ statfs64_conv (struct statfs *buf, const struct statfs64 *buf64) > # define DO(memb) \ > buf->memb = buf64->memb; \ > if (sizeof buf->memb != sizeof buf64->memb && buf->memb != buf64->memb) \ > - { \ > - __set_errno (EOVERFLOW); \ > - return -1; \ > - } > + return __hurd_fail (EOVERFLOW); > > DO (f_type); > DO (f_bsize); > diff --git a/sysdeps/mach/hurd/ttyname_r.c b/sysdeps/mach/hurd/ttyname_r.c > index 35a657bf..8fd05a8d 100644 > --- a/sysdeps/mach/hurd/ttyname_r.c > +++ b/sysdeps/mach/hurd/ttyname_r.c > @@ -41,10 +41,7 @@ __ttyname_r (int fd, char *buf, size_t buflen) > > len = strlen (nodename) + 1; > if (len > buflen) > - { > - errno = ERANGE; > - return errno; > - } > + return __hurd_fail (ERANGE), ERANGE; > > memcpy (buf, nodename, len); > return 0; > diff --git a/sysdeps/mach/hurd/unlinkat.c b/sysdeps/mach/hurd/unlinkat.c > index 5197a30c..cdc27742 100644 > --- a/sysdeps/mach/hurd/unlinkat.c > +++ b/sysdeps/mach/hurd/unlinkat.c > @@ -33,10 +33,7 @@ __unlinkat (int fd, const char *name, int flag) > const char *file; > > if ((flag &~ AT_REMOVEDIR) != 0) > - { > - __set_errno (EINVAL); > - return -1; > - } > + return __hurd_fail (EINVAL); > > dir = __directory_name_split_at (fd, name, (char **) &file); > if (dir == MACH_PORT_NULL) > diff --git a/sysdeps/mach/hurd/waitid.c b/sysdeps/mach/hurd/waitid.c > index 7bbbbdbe..3a416971 100644 > --- a/sysdeps/mach/hurd/waitid.c > +++ b/sysdeps/mach/hurd/waitid.c > @@ -52,8 +52,7 @@ __waitid (idtype_t idtype, id_t id, siginfo_t *infop, int options) > break; > default: > invalid: > - __set_errno (EINVAL); > - return -1; > + return __hurd_fail (EINVAL); > } > > /* Technically we're supposed to return EFAULT if infop is bogus, > @@ -62,10 +61,7 @@ __waitid (idtype_t idtype, id_t id, siginfo_t *infop, int options) > We just check for a null pointer. */ > > if (infop == NULL) > - { > - __set_errno (EFAULT); > - return -1; > - } > + return __hurd_fail (EFAULT); > > cancel_oldtype = LIBC_CANCEL_ASYNC(); > #if HURD_INTERFACE_VERSION >= 20201227 > diff --git a/sysdeps/mach/hurd/x86_64/sigreturn.c b/sysdeps/mach/hurd/x86_64/sigreturn.c > index 5d3a4d31..f37ae119 100644 > --- a/sysdeps/mach/hurd/x86_64/sigreturn.c > +++ b/sysdeps/mach/hurd/x86_64/sigreturn.c > @@ -79,10 +79,7 @@ __sigreturn (struct sigcontext *scp) > struct hurd_userlink *link = (void *) &scp[1]; > > if (__glibc_unlikely (scp == NULL || (scp->sc_mask & _SIG_CANT_MASK))) > - { > - errno = EINVAL; > - return -1; > - } > + return __hurd_fail (EINVAL); > > ss = _hurd_self_sigstate (); > _hurd_sigstate_lock (ss); > -- > 2.40.1 > > > -- Samuel --- Pour une évaluation indépendante, transparente et rigoureuse ! Je soutiens la Commission d'Évaluation de l'Inria.