Message ID | 1501765874-6201-6-git-send-email-adhemerval.zanella@linaro.org |
---|---|
State | Accepted |
Commit | c181840c93d3a8fcb50991b2326c40f34eb5e82b |
Headers | show |
Series | None | expand |
Since this is a refactor, if no one opposes I will commit it shortly. On 03/08/2017 10:11, Adhemerval Zanella wrote: > This patch consolidates all the non cancellable close calls to use > the __close_nocancel{_nostatus} identifier. For non cancellable targets > it will be just a macro to call the default respective symbol while on Linux > will be a internal one. > > Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu. > > * sysdeps/generic/not-cancel.h (close_not_cancel): Remove macro. > (close_not_cancel_no_status): Likewise. > (__close_nocancel): New macro. > (__close_nocancel_no_status): Likewise. > * sysdeps/unix/sysv/linux/not-cancel.h (__close_nocancel): Remove > macro. > (close_not_cancel): Likewise. > (close_not_cancel_no_status): Likewise. > (__close_nocancel): New prototype. > (__close_nocancel_no_status): New function. > * sysdeps/unix/sysv/linux/close.c (__close_nocancel): New function. > * catgets/open_catalog.c (__open_catalog): Replace > close_not_cancel{_no_status) with __close_nocancel{_nostatus}. > * gmon/gmon.c (write_gmon): Likewise. > * iconv/gconv_cache.c (__gconv_load_cache): Likewise. > * intl/loadmsgcat.c (close): Likewise. > * io/ftw.c (open_dir_stream): Likewise. > (ftw_startup): Likewise. > * libio/fileops.c (_IO_file_open): Likewise. > (_IO_file_close_mmap): Likewise. > (_IO_file_close): Likewise. > * libio/iopopen.c (_IO_dup2): Likewise. > * locale/loadarchive.c (_nl_load_locale_from_archive): Likewise. > * locale/loadlocale.c (_nl_load_locale): Likewise. > * login/utmp_file.c (pututline_file): Likewise. > (endutent_file): Likewise. > * misc/daemon.c (daemon): Likewise. > * nscd/nscd_getai.c (__nscd_getai): Likewise. > * nscd/nscd_getgr_r.c (nscd_getgr_r): Likewise. > * nscd/nscd_gethst_r.c (nscd_gethst_r): Likewise. > * nscd/nscd_getpw_r.c (nscd_getpw_r): Likewise. > * nscd/nscd_getserv_r.c (nscd_getserv_r): Likewise. > * nscd/nscd_helper.c (open_socket): Likewise. > (__nscd_open_socket): Likewise. > * nscd/nscd_initgroups.c (__nscd_getgrouplist): Likewise. > * nscd/nscd_netgroup.c (__nscd_setnetgrent): Likewise. > (__nscd_innetgr): Likewise. > * nss/nss_db/db-open.c (internal_setent): Likewise. > * resolv/res-close.c (__res_iclose): Likewise. > * sunrpc/pm_getmaps.c (pmap_getmaps): Likewise. > * sysdeps/posix/closedir.c (__closedir): Likewise. > * sysdeps/posix/getaddrinfo.c (getaddrinfo): Likewise. > * sysdeps/posix/getcwd.c (__getcwd): Likewise. > * sysdeps/posix/opendir.c (tryopen_o_directory): Likewise. > (opendir_tail): Likewise. > * sysdeps/posix/spawni.c (__spawni_child): Likewise. > * sysdeps/unix/sysv/linux/check_native.c (__check_native): Likewise. > * sysdeps/unix/sysv/linux/check_pf.c (__check_pf): Likewise. > * sysdeps/unix/sysv/linux/fips-private.h (fips_enabled_p): Likewise. > * sysdeps/unix/sysv/linux/gethostid.c (sethostid): Likewise. > (gethostid): Likewise. > * sysdeps/unix/sysv/linux/getloadavg.c (getloadavg): Likewise. > * sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid): > Likewise. > * sysdeps/unix/sysv/linux/getsysstats.c (__get_nprocs): Likewise. > * sysdeps/unix/sysv/linux/grantpt.c (close_all_fds): Likewise. > * sysdeps/unix/sysv/linux/i386/smp.h (is_smp_system): Likewise. > * sysdeps/unix/sysv/linux/ia64/has_cpuclock.c (has_cpuclock): > Likewise. > * sysdeps/unix/sysv/linux/if_index.c (__if_nametoindex): Likewise. > * sysdeps/unix/sysv/linux/libc_fatal.c (backtrace_and_maps): Likewise. > * sysdeps/unix/sysv/linux/malloc-sysdep.h (check_may_shrink_heap): > Likewise. > * sysdeps/unix/sysv/linux/mq_notify.c (init_mq_netlink): Likewise. > * sysdeps/unix/sysv/linux/pthread_getname.c (pthread_getname_np): > Likewise. > * sysdeps/unix/sysv/linux/pthread_setname.c (pthread_setname_np): > Likewise. > * sysdeps/unix/sysv/linux/spawni.c (__spawni_child): Likewise. > * sysdeps/unix/sysv/linux/sysconf.c (__sysconf): Likewise. > --- > ChangeLog | 71 +++++++++++++++++++++++++++++ > catgets/open_catalog.c | 2 +- > gmon/gmon.c | 2 +- > iconv/gconv_cache.c | 4 +- > intl/loadmsgcat.c | 2 +- > io/ftw.c | 4 +- > libio/fileops.c | 6 +-- > libio/iopopen.c | 2 +- > locale/loadarchive.c | 6 +-- > locale/loadlocale.c | 6 +-- > login/utmp_file.c | 8 ++-- > misc/daemon.c | 4 +- > nscd/nscd_getai.c | 2 +- > nscd/nscd_getgr_r.c | 2 +- > nscd/nscd_gethst_r.c | 2 +- > nscd/nscd_getpw_r.c | 2 +- > nscd/nscd_getserv_r.c | 2 +- > nscd/nscd_helper.c | 4 +- > nscd/nscd_initgroups.c | 2 +- > nscd/nscd_netgroup.c | 4 +- > nss/nss_db/db-open.c | 2 +- > resolv/res-close.c | 4 +- > sunrpc/pm_getmaps.c | 2 +- > sysdeps/generic/not-cancel.h | 4 +- > sysdeps/posix/closedir.c | 2 +- > sysdeps/posix/getaddrinfo.c | 4 +- > sysdeps/posix/getcwd.c | 4 +- > sysdeps/posix/opendir.c | 6 +-- > sysdeps/posix/spawni.c | 6 +-- > sysdeps/unix/sysv/linux/check_native.c | 2 +- > sysdeps/unix/sysv/linux/check_pf.c | 2 +- > sysdeps/unix/sysv/linux/close.c | 12 +++++ > sysdeps/unix/sysv/linux/fips-private.h | 2 +- > sysdeps/unix/sysv/linux/gethostid.c | 4 +- > sysdeps/unix/sysv/linux/getloadavg.c | 2 +- > sysdeps/unix/sysv/linux/getlogin_r.c | 2 +- > sysdeps/unix/sysv/linux/getsysstats.c | 6 +-- > sysdeps/unix/sysv/linux/grantpt.c | 2 +- > sysdeps/unix/sysv/linux/i386/smp.h | 2 +- > sysdeps/unix/sysv/linux/ia64/has_cpuclock.c | 2 +- > sysdeps/unix/sysv/linux/if_index.c | 6 +-- > sysdeps/unix/sysv/linux/libc_fatal.c | 2 +- > sysdeps/unix/sysv/linux/malloc-sysdep.h | 2 +- > sysdeps/unix/sysv/linux/mq_notify.c | 2 +- > sysdeps/unix/sysv/linux/not-cancel.h | 18 +++++--- > sysdeps/unix/sysv/linux/pthread_getname.c | 2 +- > sysdeps/unix/sysv/linux/pthread_setname.c | 2 +- > sysdeps/unix/sysv/linux/spawni.c | 6 +-- > sysdeps/unix/sysv/linux/sysconf.c | 2 +- > 49 files changed, 169 insertions(+), 82 deletions(-) > > diff --git a/ChangeLog b/ChangeLog > index d40900c..4ee70fb 100644 > --- a/ChangeLog > +++ b/ChangeLog > @@ -1,5 +1,76 @@ > 2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org> > > + * sysdeps/generic/not-cancel.h (close_not_cancel): Remove macro. > + (close_not_cancel_no_status): Likewise. > + (__close_nocancel): New macro. > + (__close_nocancel_nostatus): Likewise. > + * sysdeps/unix/sysv/linux/not-cancel.h (__close_nocancel): Remove > + macro. > + (close_not_cancel): Likewise. > + (close_not_cancel_no_status): Likewise. > + (__close_nocancel): New prototype. > + (__close_nocancel_nostatus): New function. > + * sysdeps/unix/sysv/linux/close.c (__close_nocancel): New function. > + * catgets/open_catalog.c (__open_catalog): Replace > + close_not_cancel{_no_status) with __close_nocancel{_nostatus}. > + * gmon/gmon.c (write_gmon): Likewise. > + * iconv/gconv_cache.c (__gconv_load_cache): Likewise. > + * intl/loadmsgcat.c (close): Likewise. > + * io/ftw.c (open_dir_stream): Likewise. > + (ftw_startup): Likewise. > + * libio/fileops.c (_IO_file_open): Likewise. > + (_IO_file_close_mmap): Likewise. > + (_IO_file_close): Likewise. > + * libio/iopopen.c (_IO_dup2): Likewise. > + * locale/loadarchive.c (_nl_load_locale_from_archive): Likewise. > + * locale/loadlocale.c (_nl_load_locale): Likewise. > + * login/utmp_file.c (pututline_file): Likewise. > + (endutent_file): Likewise. > + * misc/daemon.c (daemon): Likewise. > + * nscd/nscd_getai.c (__nscd_getai): Likewise. > + * nscd/nscd_getgr_r.c (nscd_getgr_r): Likewise. > + * nscd/nscd_gethst_r.c (nscd_gethst_r): Likewise. > + * nscd/nscd_getpw_r.c (nscd_getpw_r): Likewise. > + * nscd/nscd_getserv_r.c (nscd_getserv_r): Likewise. > + * nscd/nscd_helper.c (open_socket): Likewise. > + (__nscd_open_socket): Likewise. > + * nscd/nscd_initgroups.c (__nscd_getgrouplist): Likewise. > + * nscd/nscd_netgroup.c (__nscd_setnetgrent): Likewise. > + (__nscd_innetgr): Likewise. > + * nss/nss_db/db-open.c (internal_setent): Likewise. > + * resolv/res-close.c (__res_iclose): Likewise. > + * sunrpc/pm_getmaps.c (pmap_getmaps): Likewise. > + * sysdeps/posix/closedir.c (__closedir): Likewise. > + * sysdeps/posix/getaddrinfo.c (getaddrinfo): Likewise. > + * sysdeps/posix/getcwd.c (__getcwd): Likewise. > + * sysdeps/posix/opendir.c (tryopen_o_directory): Likewise. > + (opendir_tail): Likewise. > + * sysdeps/posix/spawni.c (__spawni_child): Likewise. > + * sysdeps/unix/sysv/linux/check_native.c (__check_native): Likewise. > + * sysdeps/unix/sysv/linux/check_pf.c (__check_pf): Likewise. > + * sysdeps/unix/sysv/linux/fips-private.h (fips_enabled_p): Likewise. > + * sysdeps/unix/sysv/linux/gethostid.c (sethostid): Likewise. > + (gethostid): Likewise. > + * sysdeps/unix/sysv/linux/getloadavg.c (getloadavg): Likewise. > + * sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid): > + Likewise. > + * sysdeps/unix/sysv/linux/getsysstats.c (__get_nprocs): Likewise. > + * sysdeps/unix/sysv/linux/grantpt.c (close_all_fds): Likewise. > + * sysdeps/unix/sysv/linux/i386/smp.h (is_smp_system): Likewise. > + * sysdeps/unix/sysv/linux/ia64/has_cpuclock.c (has_cpuclock): > + Likewise. > + * sysdeps/unix/sysv/linux/if_index.c (__if_nametoindex): Likewise. > + * sysdeps/unix/sysv/linux/libc_fatal.c (backtrace_and_maps): Likewise. > + * sysdeps/unix/sysv/linux/malloc-sysdep.h (check_may_shrink_heap): > + Likewise. > + * sysdeps/unix/sysv/linux/mq_notify.c (init_mq_netlink): Likewise. > + * sysdeps/unix/sysv/linux/pthread_getname.c (pthread_getname_np): > + Likewise. > + * sysdeps/unix/sysv/linux/pthread_setname.c (pthread_setname_np): > + Likewise. > + * sysdeps/unix/sysv/linux/spawni.c (__spawni_child): Likewise. > + * sysdeps/unix/sysv/linux/sysconf.c (__sysconf): Likewise. > + > * sysdeps/generic/not-cancel.h (openat_not_cancel): Remove macro. > (openat_not_cancel_3): Likewise. > (openat64_not_cancel_3): Likewise). > diff --git a/catgets/open_catalog.c b/catgets/open_catalog.c > index d79a6b1..42f61fb 100644 > --- a/catgets/open_catalog.c > +++ b/catgets/open_catalog.c > @@ -328,7 +328,7 @@ __open_catalog (const char *cat_name, const char *nlspath, const char *env_var, > > /* Release the lock again. */ > close_unlock_return: > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > free (buf); > > return result; > diff --git a/gmon/gmon.c b/gmon/gmon.c > index e7701b9..90c7895 100644 > --- a/gmon/gmon.c > +++ b/gmon/gmon.c > @@ -386,7 +386,7 @@ write_gmon (void) > /* write basic-block execution counts: */ > write_bb_counts (fd); > > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > } > > > diff --git a/iconv/gconv_cache.c b/iconv/gconv_cache.c > index f1dce29..d6a47de 100644 > --- a/iconv/gconv_cache.c > +++ b/iconv/gconv_cache.c > @@ -71,7 +71,7 @@ __gconv_load_cache (void) > || (size_t) st.st_size < sizeof (struct gconvcache_header)) > { > close_and_exit: > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > return -1; > } > > @@ -108,7 +108,7 @@ __gconv_load_cache (void) > } > > /* We don't need the file descriptor anymore. */ > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > > /* Check the consistency. */ > header = (struct gconvcache_header *) gconv_cache; > diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c > index 514e38f..13e2f2a 100644 > --- a/intl/loadmsgcat.c > +++ b/intl/loadmsgcat.c > @@ -446,7 +446,7 @@ > because some ISO C functions will require linking with this object > file and the name space must not be polluted. */ > # define open(name, flags) __open_nocancel (name, flags) > -# define close(fd) close_not_cancel_no_status (fd) > +# define close(fd) __close_nocancel_nostatus (fd) > # define read(fd, buf, n) __read_nocancel (fd, buf, n) > # define mmap(addr, len, prot, flags, fd, offset) \ > __mmap (addr, len, prot, flags, fd, offset) > diff --git a/io/ftw.c b/io/ftw.c > index f33fed3..106b6bf 100644 > --- a/io/ftw.c > +++ b/io/ftw.c > @@ -341,7 +341,7 @@ open_dir_stream (int *dfdp, struct ftw_data *data, struct dir_data *dirp) > O_RDONLY | O_DIRECTORY | O_NDELAY); > dirp->stream = NULL; > if (fd != -1 && (dirp->stream = __fdopendir (fd)) == NULL) > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > } > else > { > @@ -791,7 +791,7 @@ ftw_startup (const char *dir, int is_nftw, void *func, int descriptors, > { > int save_err = errno; > __fchdir (cwdfd); > - close_not_cancel_no_status (cwdfd); > + __close_nocancel_nostatus (cwdfd); > __set_errno (save_err); > } > else if (cwd != NULL) > diff --git a/libio/fileops.c b/libio/fileops.c > index f025178..b8b02ba 100644 > --- a/libio/fileops.c > +++ b/libio/fileops.c > @@ -242,7 +242,7 @@ _IO_file_open (_IO_FILE *fp, const char *filename, int posix_mode, int prot, > _IO_off64_t new_pos = _IO_SYSSEEK (fp, 0, _IO_seek_end); > if (new_pos == _IO_pos_BAD && errno != ESPIPE) > { > - close_not_cancel (fdesc); > + __close_nocancel (fdesc); > return NULL; > } > } > @@ -1231,7 +1231,7 @@ _IO_file_close_mmap (_IO_FILE *fp) > fp->_IO_buf_base = fp->_IO_buf_end = NULL; > /* Cancelling close should be avoided if possible since it leaves an > unrecoverable state behind. */ > - return close_not_cancel (fp->_fileno); > + return __close_nocancel (fp->_fileno); > } > > int > @@ -1239,7 +1239,7 @@ _IO_file_close (_IO_FILE *fp) > { > /* Cancelling close should be avoided if possible since it leaves an > unrecoverable state behind. */ > - return close_not_cancel (fp->_fileno); > + return __close_nocancel (fp->_fileno); > } > libc_hidden_def (_IO_file_close) > > diff --git a/libio/iopopen.c b/libio/iopopen.c > index b78e7e5..0c20cbb 100644 > --- a/libio/iopopen.c > +++ b/libio/iopopen.c > @@ -76,7 +76,7 @@ extern int _IO_dup2 (int fd, int fd2) __THROW; > > #ifndef _IO_close > #ifdef _LIBC > -#define _IO_close close_not_cancel > +#define _IO_close __close_nocancel > #else > #define _IO_close close > #endif > diff --git a/locale/loadarchive.c b/locale/loadarchive.c > index 7825a1c..158cf14 100644 > --- a/locale/loadarchive.c > +++ b/locale/loadarchive.c > @@ -213,7 +213,7 @@ _nl_load_locale_from_archive (int category, const char **namep) > /* stat failed, very strange. */ > close_and_out: > if (fd >= 0) > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > return NULL; > } > > @@ -253,7 +253,7 @@ _nl_load_locale_from_archive (int category, const char **namep) > { > /* We've mapped the whole file already, so we can be > sure we won't need this file descriptor later. */ > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > fd = -1; > } > > @@ -452,7 +452,7 @@ _nl_load_locale_from_archive (int category, const char **namep) > > /* We don't need the file descriptor any longer. */ > if (fd >= 0) > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > fd = -1; > > /* We succeeded in mapping all the necessary regions of the archive. > diff --git a/locale/loadlocale.c b/locale/loadlocale.c > index a733557..8ba7595 100644 > --- a/locale/loadlocale.c > +++ b/locale/loadlocale.c > @@ -181,7 +181,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category) > if (__builtin_expect (__fxstat64 (_STAT_VER, fd, &st), 0) < 0) > { > puntfd: > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > return; > } > if (__glibc_unlikely (S_ISDIR (st.st_mode))) > @@ -191,7 +191,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category) > char *newp; > size_t filenamelen; > > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > > filenamelen = strlen (file->filename); > newp = (char *) alloca (filenamelen > @@ -257,7 +257,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category) > #endif /* _POSIX_MAPPED_FILES */ > > /* We have mapped the data, so we no longer need the descriptor. */ > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > > if (__glibc_unlikely (filedata == NULL)) > /* We failed to map or read the data. */ > diff --git a/login/utmp_file.c b/login/utmp_file.c > index 26e3f4b..68e00f2 100644 > --- a/login/utmp_file.c > +++ b/login/utmp_file.c > @@ -382,10 +382,10 @@ pututline_file (const struct utmp *data) > if (__lseek64 (new_fd, __lseek64 (file_fd, 0, SEEK_CUR), SEEK_SET) == -1 > || __dup2 (new_fd, file_fd) < 0) > { > - close_not_cancel_no_status (new_fd); > + __close_nocancel_nostatus (new_fd); > return NULL; > } > - close_not_cancel_no_status (new_fd); > + __close_nocancel_nostatus (new_fd); > file_writable = true; > } > > @@ -471,7 +471,7 @@ endutent_file (void) > { > assert (file_fd >= 0); > > - close_not_cancel_no_status (file_fd); > + __close_nocancel_nostatus (file_fd); > file_fd = -1; > } > > @@ -518,7 +518,7 @@ unlock_return: > UNLOCK_FILE (fd); > > /* Close WTMP file. */ > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > > return result; > } > diff --git a/misc/daemon.c b/misc/daemon.c > index dd38f2b..21e7859 100644 > --- a/misc/daemon.c > +++ b/misc/daemon.c > @@ -80,12 +80,12 @@ daemon (int nochdir, int noclose) > } else { > /* We must set an errno value since no > function call actually failed. */ > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > __set_errno (ENODEV); > return -1; > } > } else { > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > return -1; > } > } > diff --git a/nscd/nscd_getai.c b/nscd/nscd_getai.c > index daaf6d6..03c0296 100644 > --- a/nscd/nscd_getai.c > +++ b/nscd/nscd_getai.c > @@ -189,7 +189,7 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop) > > out_close: > if (sock != -1) > - close_not_cancel_no_status (sock); > + __close_nocancel_nostatus (sock); > out: > if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0) > { > diff --git a/nscd/nscd_getgr_r.c b/nscd/nscd_getgr_r.c > index 87b4552..1f60261 100644 > --- a/nscd/nscd_getgr_r.c > +++ b/nscd/nscd_getgr_r.c > @@ -305,7 +305,7 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type, > > out_close: > if (sock != -1) > - close_not_cancel_no_status (sock); > + __close_nocancel_nostatus (sock); > out: > if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0) > { > diff --git a/nscd/nscd_gethst_r.c b/nscd/nscd_gethst_r.c > index daa708b..e234c7f 100644 > --- a/nscd/nscd_gethst_r.c > +++ b/nscd/nscd_gethst_r.c > @@ -436,7 +436,7 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type, > > out_close: > if (sock != -1) > - close_not_cancel_no_status (sock); > + __close_nocancel_nostatus (sock); > out: > if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0) > { > diff --git a/nscd/nscd_getpw_r.c b/nscd/nscd_getpw_r.c > index b291d2f..fbece1c 100644 > --- a/nscd/nscd_getpw_r.c > +++ b/nscd/nscd_getpw_r.c > @@ -218,7 +218,7 @@ nscd_getpw_r (const char *key, size_t keylen, request_type type, > > out_close: > if (sock != -1) > - close_not_cancel_no_status (sock); > + __close_nocancel_nostatus (sock); > out: > if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0) > { > diff --git a/nscd/nscd_getserv_r.c b/nscd/nscd_getserv_r.c > index 7dfb1c8..12c3104 100644 > --- a/nscd/nscd_getserv_r.c > +++ b/nscd/nscd_getserv_r.c > @@ -356,7 +356,7 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto, > > out_close: > if (sock != -1) > - close_not_cancel_no_status (sock); > + __close_nocancel_nostatus (sock); > out: > if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0) > { > diff --git a/nscd/nscd_helper.c b/nscd/nscd_helper.c > index 22905d0..a225623 100644 > --- a/nscd/nscd_helper.c > +++ b/nscd/nscd_helper.c > @@ -236,7 +236,7 @@ open_socket (request_type type, const char *key, size_t keylen) > } > > out: > - close_not_cancel_no_status (sock); > + __close_nocancel_nostatus (sock); > > return -1; > } > @@ -555,7 +555,7 @@ __nscd_open_socket (const char *key, size_t keylen, request_type type, > return sock; > } > > - close_not_cancel_no_status (sock); > + __close_nocancel_nostatus (sock); > } > > __set_errno (saved_errno); > diff --git a/nscd/nscd_initgroups.c b/nscd/nscd_initgroups.c > index 00c6508..c06f2f8 100644 > --- a/nscd/nscd_initgroups.c > +++ b/nscd/nscd_initgroups.c > @@ -157,7 +157,7 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size, > > out_close: > if (sock != -1) > - close_not_cancel_no_status (sock); > + __close_nocancel_nostatus (sock); > out: > if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0) > { > diff --git a/nscd/nscd_netgroup.c b/nscd/nscd_netgroup.c > index 44f37ef..559bb34 100644 > --- a/nscd/nscd_netgroup.c > +++ b/nscd/nscd_netgroup.c > @@ -139,7 +139,7 @@ __nscd_setnetgrent (const char *group, struct __netgrent *datap) > > out_close: > if (sock != -1) > - close_not_cancel_no_status (sock); > + __close_nocancel_nostatus (sock); > out: > if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0) > { > @@ -263,7 +263,7 @@ __nscd_innetgr (const char *netgroup, const char *host, const char *user, > > out_close: > if (sock != -1) > - close_not_cancel_no_status (sock); > + __close_nocancel_nostatus (sock); > out: > if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0) > { > diff --git a/nss/nss_db/db-open.c b/nss/nss_db/db-open.c > index 40a2540..bf08ac9 100644 > --- a/nss/nss_db/db-open.c > +++ b/nss/nss_db/db-open.c > @@ -52,7 +52,7 @@ internal_setent (const char *file, struct nss_db_map *mapping) > status = NSS_STATUS_TRYAGAIN; > } > > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > } > > return status; > diff --git a/resolv/res-close.c b/resolv/res-close.c > index 21f038c..766bf42 100644 > --- a/resolv/res-close.c > +++ b/resolv/res-close.c > @@ -94,7 +94,7 @@ __res_iclose (res_state statp, bool free_addr) > { > if (statp->_vcsock >= 0) > { > - close_not_cancel_no_status (statp->_vcsock); > + __close_nocancel_nostatus (statp->_vcsock); > statp->_vcsock = -1; > statp->_flags &= ~(RES_F_VC | RES_F_CONN); > } > @@ -103,7 +103,7 @@ __res_iclose (res_state statp, bool free_addr) > { > if (statp->_u._ext.nssocks[ns] != -1) > { > - close_not_cancel_no_status (statp->_u._ext.nssocks[ns]); > + __close_nocancel_nostatus (statp->_u._ext.nssocks[ns]); > statp->_u._ext.nssocks[ns] = -1; > } > if (free_addr) > diff --git a/sunrpc/pm_getmaps.c b/sunrpc/pm_getmaps.c > index 88c44f0..094492b 100644 > --- a/sunrpc/pm_getmaps.c > +++ b/sunrpc/pm_getmaps.c > @@ -81,7 +81,7 @@ pmap_getmaps (struct sockaddr_in *address) > } > /* We only need to close the socket here if we opened it. */ > if (closeit) > - close_not_cancel (socket); > + __close_nocancel (socket); > address->sin_port = 0; > return head; > } > diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h > index df9aea6..ee9988a 100644 > --- a/sysdeps/generic/not-cancel.h > +++ b/sysdeps/generic/not-cancel.h > @@ -26,9 +26,9 @@ > __openat (__VA_ARGS__) > #define __openat64_nocancel(...) \ > __openat64 (__VA_ARGS__) > -#define close_not_cancel(fd) \ > +#define __close_nocancel(fd) \ > __close (fd) > -#define close_not_cancel_no_status(fd) \ > +#define __close_nocancel_nostatus(fd) \ > (void) __close (fd) > #define __read_nocancel(fd, buf, n) \ > __read (fd, buf, n) > diff --git a/sysdeps/posix/closedir.c b/sysdeps/posix/closedir.c > index e7b7d77..dbde65f 100644 > --- a/sysdeps/posix/closedir.c > +++ b/sysdeps/posix/closedir.c > @@ -49,6 +49,6 @@ __closedir (DIR *dirp) > > free ((void *) dirp); > > - return close_not_cancel (fd); > + return __close_nocancel (fd); > } > weak_alias (__closedir, closedir) > diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c > index efa7118..6ad309b 100644 > --- a/sysdeps/posix/getaddrinfo.c > +++ b/sysdeps/posix/getaddrinfo.c > @@ -2401,7 +2401,7 @@ getaddrinfo (const char *name, const char *service, > { > if (fd != -1) > close_retry: > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > af = q->ai_family; > fd = __socket (af, SOCK_DGRAM | SOCK_CLOEXEC, IPPROTO_IP); > } > @@ -2504,7 +2504,7 @@ getaddrinfo (const char *name, const char *service, > } > > if (fd != -1) > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > > /* We got all the source addresses we can get, now sort using > the information. */ > diff --git a/sysdeps/posix/getcwd.c b/sysdeps/posix/getcwd.c > index ecae628..d341bdf 100644 > --- a/sysdeps/posix/getcwd.c > +++ b/sysdeps/posix/getcwd.c > @@ -176,7 +176,7 @@ extern char *alloca (); > # include <kernel-features.h> > #else > # define __openat64_nocancel(dfd, name, mode) openat64 (dfd, name, mode) > -# define close_not_cancel_no_status(fd) close (fd) > +# define __close_nocancel_nostatus(fd) close (fd) > #endif > > #ifndef PATH_MAX > @@ -521,7 +521,7 @@ __getcwd (char *buf, size_t size) > if (dirstream != NULL) > __closedir (dirstream); > if (fd_needs_closing) > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > #ifndef NO_ALLOCATION > if (buf == NULL) > free (path); > diff --git a/sysdeps/posix/opendir.c b/sysdeps/posix/opendir.c > index 51a92e8..880ebc9 100644 > --- a/sysdeps/posix/opendir.c > +++ b/sysdeps/posix/opendir.c > @@ -65,7 +65,7 @@ tryopen_o_directory (void) > > if (x >= 0) > { > - close_not_cancel_no_status (x); > + __close_nocancel_nostatus (x); > o_directory_works = -1; > } > else if (errno != ENOTDIR) > @@ -129,7 +129,7 @@ opendir_tail (int fd) > { > __set_errno (ENOTDIR); > lose: > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > return NULL; > } > > @@ -227,7 +227,7 @@ __alloc_dir (int fd, bool close_fd, int flags, const struct stat64 *statp) > if (close_fd) > { > int save_errno = errno; > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > __set_errno (save_errno); > } > return NULL; > diff --git a/sysdeps/posix/spawni.c b/sysdeps/posix/spawni.c > index a43b841..7cbdc66 100644 > --- a/sysdeps/posix/spawni.c > +++ b/sysdeps/posix/spawni.c > @@ -157,7 +157,7 @@ __spawni_child (void *arguments) > switch (action->tag) > { > case spawn_do_close: > - if (close_not_cancel (action->action.close_action.fd) != 0) > + if (__close_nocancel (action->action.close_action.fd) != 0) > { > if (have_fdlimit == 0) > { > @@ -180,7 +180,7 @@ __spawni_child (void *arguments) > with the process already at maximum number of file descriptor > opened and also for multiple actions on single-open special > paths (like /dev/watchdog). */ > - close_not_cancel (action->action.open_action.fd); > + __close_nocancel (action->action.open_action.fd); > > int new_fd = __open_nocancel (action->action.open_action.path, > action->action.open_action.oflag > @@ -197,7 +197,7 @@ __spawni_child (void *arguments) > != action->action.open_action.fd) > goto fail; > > - if (close_not_cancel (new_fd) != 0) > + if (__close_nocancel (new_fd) != 0) > goto fail; > } > } > diff --git a/sysdeps/unix/sysv/linux/check_native.c b/sysdeps/unix/sysv/linux/check_native.c > index 7e5a7c9..dc2da83 100644 > --- a/sysdeps/unix/sysv/linux/check_native.c > +++ b/sysdeps/unix/sysv/linux/check_native.c > @@ -167,7 +167,7 @@ __check_native (uint32_t a1_index, int *a1_native, > while (! done); > > out: > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > > return; > > diff --git a/sysdeps/unix/sysv/linux/check_pf.c b/sysdeps/unix/sysv/linux/check_pf.c > index 3bf221a..4dd0275 100644 > --- a/sysdeps/unix/sysv/linux/check_pf.c > +++ b/sysdeps/unix/sysv/linux/check_pf.c > @@ -328,7 +328,7 @@ __check_pf (bool *seen_ipv4, bool *seen_ipv6, > &addr_len) == 0) > data = make_request (fd, nladdr.nl_pid); > > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > } > > if (data != NULL) > diff --git a/sysdeps/unix/sysv/linux/close.c b/sysdeps/unix/sysv/linux/close.c > index 1ac71ce..dd21d8d 100644 > --- a/sysdeps/unix/sysv/linux/close.c > +++ b/sysdeps/unix/sysv/linux/close.c > @@ -18,6 +18,7 @@ > > #include <unistd.h> > #include <sysdep-cancel.h> > +#include <not-cancel.h> > > /* Close the file descriptor FD. */ > int > @@ -28,3 +29,14 @@ __close (int fd) > libc_hidden_def (__close) > strong_alias (__close, __libc_close) > weak_alias (__close, close) > + > +# if !IS_IN (rtld) > +int > +__close_nocancel (int fd) > +{ > + return INLINE_SYSCALL_CALL (close, fd); > +} > +#else > +strong_alias (__libc_close, __close_nocancel) > +#endif > +libc_hidden_def (__close_nocancel) > diff --git a/sysdeps/unix/sysv/linux/fips-private.h b/sysdeps/unix/sysv/linux/fips-private.h > index 775f2c2..23833f0 100644 > --- a/sysdeps/unix/sysv/linux/fips-private.h > +++ b/sysdeps/unix/sysv/linux/fips-private.h > @@ -50,7 +50,7 @@ fips_enabled_p (void) > char buf[32]; > ssize_t n; > n = TEMP_FAILURE_RETRY (__read_nocancel (fd, buf, sizeof (buf) - 1)); > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > > if (n > 0) > { > diff --git a/sysdeps/unix/sysv/linux/gethostid.c b/sysdeps/unix/sysv/linux/gethostid.c > index 11c7e73..ca03877 100644 > --- a/sysdeps/unix/sysv/linux/gethostid.c > +++ b/sysdeps/unix/sysv/linux/gethostid.c > @@ -53,7 +53,7 @@ sethostid (long int id) > > written = __write_nocancel (fd, &id32, sizeof (id32)); > > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > > return written != sizeof (id32) ? -1 : 0; > } > @@ -82,7 +82,7 @@ gethostid (void) > { > ssize_t n = __read_nocancel (fd, &id, sizeof (id)); > > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > > if (n == sizeof (id)) > return id; > diff --git a/sysdeps/unix/sysv/linux/getloadavg.c b/sysdeps/unix/sysv/linux/getloadavg.c > index 64bad17..4b75741 100644 > --- a/sysdeps/unix/sysv/linux/getloadavg.c > +++ b/sysdeps/unix/sysv/linux/getloadavg.c > @@ -43,7 +43,7 @@ getloadavg (double loadavg[], int nelem) > int i; > > nread = __read_nocancel (fd, buf, sizeof buf - 1); > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > if (nread <= 0) > return -1; > buf[nread - 1] = '\0'; > diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c b/sysdeps/unix/sysv/linux/getlogin_r.c > index 1de746b..45c468f 100644 > --- a/sysdeps/unix/sysv/linux/getlogin_r.c > +++ b/sysdeps/unix/sysv/linux/getlogin_r.c > @@ -43,7 +43,7 @@ __getlogin_r_loginuid (char *name, size_t namesize) > char uidbuf[12]; > ssize_t n = TEMP_FAILURE_RETRY (__read_nocancel (fd, uidbuf, > sizeof (uidbuf))); > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > > uid_t uid; > char *endp; > diff --git a/sysdeps/unix/sysv/linux/getsysstats.c b/sysdeps/unix/sysv/linux/getsysstats.c > index d1400d6..d02c86d 100644 > --- a/sysdeps/unix/sysv/linux/getsysstats.c > +++ b/sysdeps/unix/sysv/linux/getsysstats.c > @@ -180,7 +180,7 @@ __get_nprocs (void) > } > while (l < re); > > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > > if (result > 0) > goto out; > @@ -207,7 +207,7 @@ __get_nprocs (void) > else if (isdigit (l[3])) > ++result; > > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > } > else > { > @@ -215,7 +215,7 @@ __get_nprocs (void) > if (fd != -1) > { > GET_NPROCS_PARSER (fd, buffer, cp, re, buffer_end, result); > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > } > } > > diff --git a/sysdeps/unix/sysv/linux/grantpt.c b/sysdeps/unix/sysv/linux/grantpt.c > index 97c6ba7..2030e07 100644 > --- a/sysdeps/unix/sysv/linux/grantpt.c > +++ b/sysdeps/unix/sysv/linux/grantpt.c > @@ -26,7 +26,7 @@ close_all_fds (void) > char *endp; > long int fd = strtol (d->d_name, &endp, 10); > if (*endp == '\0' && fd != PTY_FILENO && fd != dirfd (dir)) > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > } > > __closedir (dir); > diff --git a/sysdeps/unix/sysv/linux/i386/smp.h b/sysdeps/unix/sysv/linux/i386/smp.h > index eb1ac5d..320958a 100644 > --- a/sysdeps/unix/sysv/linux/i386/smp.h > +++ b/sysdeps/unix/sysv/linux/i386/smp.h > @@ -47,7 +47,7 @@ is_smp_system (void) > /* This also didn't work. We give up and say it's a UP machine. */ > u.buf[0] = '\0'; > > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > cp = u.buf; > } > > diff --git a/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c b/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c > index 6aab1e8..79c95b4 100644 > --- a/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c > +++ b/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c > @@ -41,7 +41,7 @@ has_cpuclock (void) > || buf[0] != '0' || buf[1] != '\n') > newval = -1; > > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > } > > itc_usable = newval; > diff --git a/sysdeps/unix/sysv/linux/if_index.c b/sysdeps/unix/sysv/linux/if_index.c > index 8ba5eae..56f3f13 100644 > --- a/sysdeps/unix/sysv/linux/if_index.c > +++ b/sysdeps/unix/sysv/linux/if_index.c > @@ -47,12 +47,12 @@ __if_nametoindex (const char *ifname) > if (__ioctl (fd, SIOCGIFINDEX, &ifr) < 0) > { > int saved_errno = errno; > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > if (saved_errno == EINVAL) > __set_errno (ENOSYS); > return 0; > } > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > return ifr.ifr_ifindex; > #endif > } > @@ -224,7 +224,7 @@ __if_indextoname (unsigned int ifindex, char *ifname) > ifr.ifr_ifindex = ifindex; > status = __ioctl (fd, SIOCGIFNAME, &ifr); > > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > > if (status < 0) > { > diff --git a/sysdeps/unix/sysv/linux/libc_fatal.c b/sysdeps/unix/sysv/linux/libc_fatal.c > index c7c6a07..4bc1521 100644 > --- a/sysdeps/unix/sysv/linux/libc_fatal.c > +++ b/sysdeps/unix/sysv/linux/libc_fatal.c > @@ -59,7 +59,7 @@ backtrace_and_maps (int do_abort, bool written, int fd) > while ((n2 = __read_nocancel (fd2, buf, sizeof (buf))) > 0) > if (__write_nocancel (fd, buf, n2) != n2) > break; > - close_not_cancel_no_status (fd2); > + __close_nocancel_nostatus (fd2); > } > } > } > diff --git a/sysdeps/unix/sysv/linux/malloc-sysdep.h b/sysdeps/unix/sysv/linux/malloc-sysdep.h > index 7a7acba..4bb7bc0 100644 > --- a/sysdeps/unix/sysv/linux/malloc-sysdep.h > +++ b/sysdeps/unix/sysv/linux/malloc-sysdep.h > @@ -49,7 +49,7 @@ check_may_shrink_heap (void) > char val; > ssize_t n = __read_nocancel (fd, &val, 1); > may_shrink_heap = n > 0 && val == '2'; > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > } > } > > diff --git a/sysdeps/unix/sysv/linux/mq_notify.c b/sysdeps/unix/sysv/linux/mq_notify.c > index 626430c..f12e6f5 100644 > --- a/sysdeps/unix/sysv/linux/mq_notify.c > +++ b/sysdeps/unix/sysv/linux/mq_notify.c > @@ -209,7 +209,7 @@ init_mq_netlink (void) > > if (err != 0) > { > - close_not_cancel_no_status (netlink_socket); > + __close_nocancel_nostatus (netlink_socket); > netlink_socket = -1; > } > } > diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h > index 08ad773..684541a 100644 > --- a/sysdeps/unix/sysv/linux/not-cancel.h > +++ b/sysdeps/unix/sysv/linux/not-cancel.h > @@ -51,13 +51,17 @@ __typeof (__write) __write_nocancel; > libc_hidden_proto (__write_nocancel) > > /* Uncancelable close. */ > -#define __close_nocancel(fd) \ > - INLINE_SYSCALL (close, 1, fd) > -#define close_not_cancel(fd) \ > - __close_nocancel (fd) > -#define close_not_cancel_no_status(fd) \ > - (void) ({ INTERNAL_SYSCALL_DECL (err); \ > - INTERNAL_SYSCALL (close, err, 1, (fd)); }) > +__typeof (__close) __close_nocancel; > +libc_hidden_proto (__close_nocancel) > + > +/* Non cancellable close syscall that does not also set errno in case of > + failure. */ > +static inline void > +__close_nocancel_nostatus (int fd) > +{ > + INTERNAL_SYSCALL_DECL (err); > + INTERNAL_SYSCALL (close, err, 1, (fd)); > +} > > /* Uncancelable writev. */ > #define writev_not_cancel_no_status(fd, iov, n) \ > diff --git a/sysdeps/unix/sysv/linux/pthread_getname.c b/sysdeps/unix/sysv/linux/pthread_getname.c > index 93c1dfd..d3dfee0 100644 > --- a/sysdeps/unix/sysv/linux/pthread_getname.c > +++ b/sysdeps/unix/sysv/linux/pthread_getname.c > @@ -63,7 +63,7 @@ pthread_getname_np (pthread_t th, char *buf, size_t len) > buf[n] = '\0'; > } > > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > > return res; > } > diff --git a/sysdeps/unix/sysv/linux/pthread_setname.c b/sysdeps/unix/sysv/linux/pthread_setname.c > index c5e9a33..2f68086 100644 > --- a/sysdeps/unix/sysv/linux/pthread_setname.c > +++ b/sysdeps/unix/sysv/linux/pthread_setname.c > @@ -57,7 +57,7 @@ pthread_setname_np (pthread_t th, const char *name) > else if (n != name_len) > res = EIO; > > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > > return res; > } > diff --git a/sysdeps/unix/sysv/linux/spawni.c b/sysdeps/unix/sysv/linux/spawni.c > index 4994a07..dea1650 100644 > --- a/sysdeps/unix/sysv/linux/spawni.c > +++ b/sysdeps/unix/sysv/linux/spawni.c > @@ -205,7 +205,7 @@ __spawni_child (void *arguments) > switch (action->tag) > { > case spawn_do_close: > - if (close_not_cancel (action->action.close_action.fd) != 0) > + if (__close_nocancel (action->action.close_action.fd) != 0) > { > if (!have_fdlimit) > { > @@ -228,7 +228,7 @@ __spawni_child (void *arguments) > with the process already at maximum number of file descriptor > opened and also for multiple actions on single-open special > paths (like /dev/watchdog). */ > - close_not_cancel (action->action.open_action.fd); > + __close_nocancel (action->action.open_action.fd); > > int ret = __open_nocancel (action->action.open_action.path, > action->action. > @@ -247,7 +247,7 @@ __spawni_child (void *arguments) > != action->action.open_action.fd) > goto fail; > > - if (close_not_cancel (new_fd) != 0) > + if (__close_nocancel (new_fd) != 0) > goto fail; > } > } > diff --git a/sysdeps/unix/sysv/linux/sysconf.c b/sysdeps/unix/sysv/linux/sysconf.c > index f9becfb..773a6ac 100644 > --- a/sysdeps/unix/sysv/linux/sysconf.c > +++ b/sysdeps/unix/sysv/linux/sysconf.c > @@ -122,7 +122,7 @@ __sysconf (int name) > char buf[32]; > ssize_t n; > n = TEMP_FAILURE_RETRY (__read_nocancel (fd, buf, sizeof (buf) - 1)); > - close_not_cancel_no_status (fd); > + __close_nocancel_nostatus (fd); > > if (n > 0) > { >
diff --git a/ChangeLog b/ChangeLog index d40900c..4ee70fb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,76 @@ 2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org> + * sysdeps/generic/not-cancel.h (close_not_cancel): Remove macro. + (close_not_cancel_no_status): Likewise. + (__close_nocancel): New macro. + (__close_nocancel_nostatus): Likewise. + * sysdeps/unix/sysv/linux/not-cancel.h (__close_nocancel): Remove + macro. + (close_not_cancel): Likewise. + (close_not_cancel_no_status): Likewise. + (__close_nocancel): New prototype. + (__close_nocancel_nostatus): New function. + * sysdeps/unix/sysv/linux/close.c (__close_nocancel): New function. + * catgets/open_catalog.c (__open_catalog): Replace + close_not_cancel{_no_status) with __close_nocancel{_nostatus}. + * gmon/gmon.c (write_gmon): Likewise. + * iconv/gconv_cache.c (__gconv_load_cache): Likewise. + * intl/loadmsgcat.c (close): Likewise. + * io/ftw.c (open_dir_stream): Likewise. + (ftw_startup): Likewise. + * libio/fileops.c (_IO_file_open): Likewise. + (_IO_file_close_mmap): Likewise. + (_IO_file_close): Likewise. + * libio/iopopen.c (_IO_dup2): Likewise. + * locale/loadarchive.c (_nl_load_locale_from_archive): Likewise. + * locale/loadlocale.c (_nl_load_locale): Likewise. + * login/utmp_file.c (pututline_file): Likewise. + (endutent_file): Likewise. + * misc/daemon.c (daemon): Likewise. + * nscd/nscd_getai.c (__nscd_getai): Likewise. + * nscd/nscd_getgr_r.c (nscd_getgr_r): Likewise. + * nscd/nscd_gethst_r.c (nscd_gethst_r): Likewise. + * nscd/nscd_getpw_r.c (nscd_getpw_r): Likewise. + * nscd/nscd_getserv_r.c (nscd_getserv_r): Likewise. + * nscd/nscd_helper.c (open_socket): Likewise. + (__nscd_open_socket): Likewise. + * nscd/nscd_initgroups.c (__nscd_getgrouplist): Likewise. + * nscd/nscd_netgroup.c (__nscd_setnetgrent): Likewise. + (__nscd_innetgr): Likewise. + * nss/nss_db/db-open.c (internal_setent): Likewise. + * resolv/res-close.c (__res_iclose): Likewise. + * sunrpc/pm_getmaps.c (pmap_getmaps): Likewise. + * sysdeps/posix/closedir.c (__closedir): Likewise. + * sysdeps/posix/getaddrinfo.c (getaddrinfo): Likewise. + * sysdeps/posix/getcwd.c (__getcwd): Likewise. + * sysdeps/posix/opendir.c (tryopen_o_directory): Likewise. + (opendir_tail): Likewise. + * sysdeps/posix/spawni.c (__spawni_child): Likewise. + * sysdeps/unix/sysv/linux/check_native.c (__check_native): Likewise. + * sysdeps/unix/sysv/linux/check_pf.c (__check_pf): Likewise. + * sysdeps/unix/sysv/linux/fips-private.h (fips_enabled_p): Likewise. + * sysdeps/unix/sysv/linux/gethostid.c (sethostid): Likewise. + (gethostid): Likewise. + * sysdeps/unix/sysv/linux/getloadavg.c (getloadavg): Likewise. + * sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid): + Likewise. + * sysdeps/unix/sysv/linux/getsysstats.c (__get_nprocs): Likewise. + * sysdeps/unix/sysv/linux/grantpt.c (close_all_fds): Likewise. + * sysdeps/unix/sysv/linux/i386/smp.h (is_smp_system): Likewise. + * sysdeps/unix/sysv/linux/ia64/has_cpuclock.c (has_cpuclock): + Likewise. + * sysdeps/unix/sysv/linux/if_index.c (__if_nametoindex): Likewise. + * sysdeps/unix/sysv/linux/libc_fatal.c (backtrace_and_maps): Likewise. + * sysdeps/unix/sysv/linux/malloc-sysdep.h (check_may_shrink_heap): + Likewise. + * sysdeps/unix/sysv/linux/mq_notify.c (init_mq_netlink): Likewise. + * sysdeps/unix/sysv/linux/pthread_getname.c (pthread_getname_np): + Likewise. + * sysdeps/unix/sysv/linux/pthread_setname.c (pthread_setname_np): + Likewise. + * sysdeps/unix/sysv/linux/spawni.c (__spawni_child): Likewise. + * sysdeps/unix/sysv/linux/sysconf.c (__sysconf): Likewise. + * sysdeps/generic/not-cancel.h (openat_not_cancel): Remove macro. (openat_not_cancel_3): Likewise. (openat64_not_cancel_3): Likewise). diff --git a/catgets/open_catalog.c b/catgets/open_catalog.c index d79a6b1..42f61fb 100644 --- a/catgets/open_catalog.c +++ b/catgets/open_catalog.c @@ -328,7 +328,7 @@ __open_catalog (const char *cat_name, const char *nlspath, const char *env_var, /* Release the lock again. */ close_unlock_return: - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); free (buf); return result; diff --git a/gmon/gmon.c b/gmon/gmon.c index e7701b9..90c7895 100644 --- a/gmon/gmon.c +++ b/gmon/gmon.c @@ -386,7 +386,7 @@ write_gmon (void) /* write basic-block execution counts: */ write_bb_counts (fd); - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); } diff --git a/iconv/gconv_cache.c b/iconv/gconv_cache.c index f1dce29..d6a47de 100644 --- a/iconv/gconv_cache.c +++ b/iconv/gconv_cache.c @@ -71,7 +71,7 @@ __gconv_load_cache (void) || (size_t) st.st_size < sizeof (struct gconvcache_header)) { close_and_exit: - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); return -1; } @@ -108,7 +108,7 @@ __gconv_load_cache (void) } /* We don't need the file descriptor anymore. */ - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); /* Check the consistency. */ header = (struct gconvcache_header *) gconv_cache; diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c index 514e38f..13e2f2a 100644 --- a/intl/loadmsgcat.c +++ b/intl/loadmsgcat.c @@ -446,7 +446,7 @@ because some ISO C functions will require linking with this object file and the name space must not be polluted. */ # define open(name, flags) __open_nocancel (name, flags) -# define close(fd) close_not_cancel_no_status (fd) +# define close(fd) __close_nocancel_nostatus (fd) # define read(fd, buf, n) __read_nocancel (fd, buf, n) # define mmap(addr, len, prot, flags, fd, offset) \ __mmap (addr, len, prot, flags, fd, offset) diff --git a/io/ftw.c b/io/ftw.c index f33fed3..106b6bf 100644 --- a/io/ftw.c +++ b/io/ftw.c @@ -341,7 +341,7 @@ open_dir_stream (int *dfdp, struct ftw_data *data, struct dir_data *dirp) O_RDONLY | O_DIRECTORY | O_NDELAY); dirp->stream = NULL; if (fd != -1 && (dirp->stream = __fdopendir (fd)) == NULL) - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); } else { @@ -791,7 +791,7 @@ ftw_startup (const char *dir, int is_nftw, void *func, int descriptors, { int save_err = errno; __fchdir (cwdfd); - close_not_cancel_no_status (cwdfd); + __close_nocancel_nostatus (cwdfd); __set_errno (save_err); } else if (cwd != NULL) diff --git a/libio/fileops.c b/libio/fileops.c index f025178..b8b02ba 100644 --- a/libio/fileops.c +++ b/libio/fileops.c @@ -242,7 +242,7 @@ _IO_file_open (_IO_FILE *fp, const char *filename, int posix_mode, int prot, _IO_off64_t new_pos = _IO_SYSSEEK (fp, 0, _IO_seek_end); if (new_pos == _IO_pos_BAD && errno != ESPIPE) { - close_not_cancel (fdesc); + __close_nocancel (fdesc); return NULL; } } @@ -1231,7 +1231,7 @@ _IO_file_close_mmap (_IO_FILE *fp) fp->_IO_buf_base = fp->_IO_buf_end = NULL; /* Cancelling close should be avoided if possible since it leaves an unrecoverable state behind. */ - return close_not_cancel (fp->_fileno); + return __close_nocancel (fp->_fileno); } int @@ -1239,7 +1239,7 @@ _IO_file_close (_IO_FILE *fp) { /* Cancelling close should be avoided if possible since it leaves an unrecoverable state behind. */ - return close_not_cancel (fp->_fileno); + return __close_nocancel (fp->_fileno); } libc_hidden_def (_IO_file_close) diff --git a/libio/iopopen.c b/libio/iopopen.c index b78e7e5..0c20cbb 100644 --- a/libio/iopopen.c +++ b/libio/iopopen.c @@ -76,7 +76,7 @@ extern int _IO_dup2 (int fd, int fd2) __THROW; #ifndef _IO_close #ifdef _LIBC -#define _IO_close close_not_cancel +#define _IO_close __close_nocancel #else #define _IO_close close #endif diff --git a/locale/loadarchive.c b/locale/loadarchive.c index 7825a1c..158cf14 100644 --- a/locale/loadarchive.c +++ b/locale/loadarchive.c @@ -213,7 +213,7 @@ _nl_load_locale_from_archive (int category, const char **namep) /* stat failed, very strange. */ close_and_out: if (fd >= 0) - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); return NULL; } @@ -253,7 +253,7 @@ _nl_load_locale_from_archive (int category, const char **namep) { /* We've mapped the whole file already, so we can be sure we won't need this file descriptor later. */ - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); fd = -1; } @@ -452,7 +452,7 @@ _nl_load_locale_from_archive (int category, const char **namep) /* We don't need the file descriptor any longer. */ if (fd >= 0) - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); fd = -1; /* We succeeded in mapping all the necessary regions of the archive. diff --git a/locale/loadlocale.c b/locale/loadlocale.c index a733557..8ba7595 100644 --- a/locale/loadlocale.c +++ b/locale/loadlocale.c @@ -181,7 +181,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category) if (__builtin_expect (__fxstat64 (_STAT_VER, fd, &st), 0) < 0) { puntfd: - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); return; } if (__glibc_unlikely (S_ISDIR (st.st_mode))) @@ -191,7 +191,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category) char *newp; size_t filenamelen; - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); filenamelen = strlen (file->filename); newp = (char *) alloca (filenamelen @@ -257,7 +257,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category) #endif /* _POSIX_MAPPED_FILES */ /* We have mapped the data, so we no longer need the descriptor. */ - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); if (__glibc_unlikely (filedata == NULL)) /* We failed to map or read the data. */ diff --git a/login/utmp_file.c b/login/utmp_file.c index 26e3f4b..68e00f2 100644 --- a/login/utmp_file.c +++ b/login/utmp_file.c @@ -382,10 +382,10 @@ pututline_file (const struct utmp *data) if (__lseek64 (new_fd, __lseek64 (file_fd, 0, SEEK_CUR), SEEK_SET) == -1 || __dup2 (new_fd, file_fd) < 0) { - close_not_cancel_no_status (new_fd); + __close_nocancel_nostatus (new_fd); return NULL; } - close_not_cancel_no_status (new_fd); + __close_nocancel_nostatus (new_fd); file_writable = true; } @@ -471,7 +471,7 @@ endutent_file (void) { assert (file_fd >= 0); - close_not_cancel_no_status (file_fd); + __close_nocancel_nostatus (file_fd); file_fd = -1; } @@ -518,7 +518,7 @@ unlock_return: UNLOCK_FILE (fd); /* Close WTMP file. */ - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); return result; } diff --git a/misc/daemon.c b/misc/daemon.c index dd38f2b..21e7859 100644 --- a/misc/daemon.c +++ b/misc/daemon.c @@ -80,12 +80,12 @@ daemon (int nochdir, int noclose) } else { /* We must set an errno value since no function call actually failed. */ - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); __set_errno (ENODEV); return -1; } } else { - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); return -1; } } diff --git a/nscd/nscd_getai.c b/nscd/nscd_getai.c index daaf6d6..03c0296 100644 --- a/nscd/nscd_getai.c +++ b/nscd/nscd_getai.c @@ -189,7 +189,7 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop) out_close: if (sock != -1) - close_not_cancel_no_status (sock); + __close_nocancel_nostatus (sock); out: if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0) { diff --git a/nscd/nscd_getgr_r.c b/nscd/nscd_getgr_r.c index 87b4552..1f60261 100644 --- a/nscd/nscd_getgr_r.c +++ b/nscd/nscd_getgr_r.c @@ -305,7 +305,7 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type, out_close: if (sock != -1) - close_not_cancel_no_status (sock); + __close_nocancel_nostatus (sock); out: if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0) { diff --git a/nscd/nscd_gethst_r.c b/nscd/nscd_gethst_r.c index daa708b..e234c7f 100644 --- a/nscd/nscd_gethst_r.c +++ b/nscd/nscd_gethst_r.c @@ -436,7 +436,7 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type, out_close: if (sock != -1) - close_not_cancel_no_status (sock); + __close_nocancel_nostatus (sock); out: if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0) { diff --git a/nscd/nscd_getpw_r.c b/nscd/nscd_getpw_r.c index b291d2f..fbece1c 100644 --- a/nscd/nscd_getpw_r.c +++ b/nscd/nscd_getpw_r.c @@ -218,7 +218,7 @@ nscd_getpw_r (const char *key, size_t keylen, request_type type, out_close: if (sock != -1) - close_not_cancel_no_status (sock); + __close_nocancel_nostatus (sock); out: if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0) { diff --git a/nscd/nscd_getserv_r.c b/nscd/nscd_getserv_r.c index 7dfb1c8..12c3104 100644 --- a/nscd/nscd_getserv_r.c +++ b/nscd/nscd_getserv_r.c @@ -356,7 +356,7 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto, out_close: if (sock != -1) - close_not_cancel_no_status (sock); + __close_nocancel_nostatus (sock); out: if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0) { diff --git a/nscd/nscd_helper.c b/nscd/nscd_helper.c index 22905d0..a225623 100644 --- a/nscd/nscd_helper.c +++ b/nscd/nscd_helper.c @@ -236,7 +236,7 @@ open_socket (request_type type, const char *key, size_t keylen) } out: - close_not_cancel_no_status (sock); + __close_nocancel_nostatus (sock); return -1; } @@ -555,7 +555,7 @@ __nscd_open_socket (const char *key, size_t keylen, request_type type, return sock; } - close_not_cancel_no_status (sock); + __close_nocancel_nostatus (sock); } __set_errno (saved_errno); diff --git a/nscd/nscd_initgroups.c b/nscd/nscd_initgroups.c index 00c6508..c06f2f8 100644 --- a/nscd/nscd_initgroups.c +++ b/nscd/nscd_initgroups.c @@ -157,7 +157,7 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size, out_close: if (sock != -1) - close_not_cancel_no_status (sock); + __close_nocancel_nostatus (sock); out: if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0) { diff --git a/nscd/nscd_netgroup.c b/nscd/nscd_netgroup.c index 44f37ef..559bb34 100644 --- a/nscd/nscd_netgroup.c +++ b/nscd/nscd_netgroup.c @@ -139,7 +139,7 @@ __nscd_setnetgrent (const char *group, struct __netgrent *datap) out_close: if (sock != -1) - close_not_cancel_no_status (sock); + __close_nocancel_nostatus (sock); out: if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0) { @@ -263,7 +263,7 @@ __nscd_innetgr (const char *netgroup, const char *host, const char *user, out_close: if (sock != -1) - close_not_cancel_no_status (sock); + __close_nocancel_nostatus (sock); out: if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0) { diff --git a/nss/nss_db/db-open.c b/nss/nss_db/db-open.c index 40a2540..bf08ac9 100644 --- a/nss/nss_db/db-open.c +++ b/nss/nss_db/db-open.c @@ -52,7 +52,7 @@ internal_setent (const char *file, struct nss_db_map *mapping) status = NSS_STATUS_TRYAGAIN; } - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); } return status; diff --git a/resolv/res-close.c b/resolv/res-close.c index 21f038c..766bf42 100644 --- a/resolv/res-close.c +++ b/resolv/res-close.c @@ -94,7 +94,7 @@ __res_iclose (res_state statp, bool free_addr) { if (statp->_vcsock >= 0) { - close_not_cancel_no_status (statp->_vcsock); + __close_nocancel_nostatus (statp->_vcsock); statp->_vcsock = -1; statp->_flags &= ~(RES_F_VC | RES_F_CONN); } @@ -103,7 +103,7 @@ __res_iclose (res_state statp, bool free_addr) { if (statp->_u._ext.nssocks[ns] != -1) { - close_not_cancel_no_status (statp->_u._ext.nssocks[ns]); + __close_nocancel_nostatus (statp->_u._ext.nssocks[ns]); statp->_u._ext.nssocks[ns] = -1; } if (free_addr) diff --git a/sunrpc/pm_getmaps.c b/sunrpc/pm_getmaps.c index 88c44f0..094492b 100644 --- a/sunrpc/pm_getmaps.c +++ b/sunrpc/pm_getmaps.c @@ -81,7 +81,7 @@ pmap_getmaps (struct sockaddr_in *address) } /* We only need to close the socket here if we opened it. */ if (closeit) - close_not_cancel (socket); + __close_nocancel (socket); address->sin_port = 0; return head; } diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h index df9aea6..ee9988a 100644 --- a/sysdeps/generic/not-cancel.h +++ b/sysdeps/generic/not-cancel.h @@ -26,9 +26,9 @@ __openat (__VA_ARGS__) #define __openat64_nocancel(...) \ __openat64 (__VA_ARGS__) -#define close_not_cancel(fd) \ +#define __close_nocancel(fd) \ __close (fd) -#define close_not_cancel_no_status(fd) \ +#define __close_nocancel_nostatus(fd) \ (void) __close (fd) #define __read_nocancel(fd, buf, n) \ __read (fd, buf, n) diff --git a/sysdeps/posix/closedir.c b/sysdeps/posix/closedir.c index e7b7d77..dbde65f 100644 --- a/sysdeps/posix/closedir.c +++ b/sysdeps/posix/closedir.c @@ -49,6 +49,6 @@ __closedir (DIR *dirp) free ((void *) dirp); - return close_not_cancel (fd); + return __close_nocancel (fd); } weak_alias (__closedir, closedir) diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c index efa7118..6ad309b 100644 --- a/sysdeps/posix/getaddrinfo.c +++ b/sysdeps/posix/getaddrinfo.c @@ -2401,7 +2401,7 @@ getaddrinfo (const char *name, const char *service, { if (fd != -1) close_retry: - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); af = q->ai_family; fd = __socket (af, SOCK_DGRAM | SOCK_CLOEXEC, IPPROTO_IP); } @@ -2504,7 +2504,7 @@ getaddrinfo (const char *name, const char *service, } if (fd != -1) - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); /* We got all the source addresses we can get, now sort using the information. */ diff --git a/sysdeps/posix/getcwd.c b/sysdeps/posix/getcwd.c index ecae628..d341bdf 100644 --- a/sysdeps/posix/getcwd.c +++ b/sysdeps/posix/getcwd.c @@ -176,7 +176,7 @@ extern char *alloca (); # include <kernel-features.h> #else # define __openat64_nocancel(dfd, name, mode) openat64 (dfd, name, mode) -# define close_not_cancel_no_status(fd) close (fd) +# define __close_nocancel_nostatus(fd) close (fd) #endif #ifndef PATH_MAX @@ -521,7 +521,7 @@ __getcwd (char *buf, size_t size) if (dirstream != NULL) __closedir (dirstream); if (fd_needs_closing) - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); #ifndef NO_ALLOCATION if (buf == NULL) free (path); diff --git a/sysdeps/posix/opendir.c b/sysdeps/posix/opendir.c index 51a92e8..880ebc9 100644 --- a/sysdeps/posix/opendir.c +++ b/sysdeps/posix/opendir.c @@ -65,7 +65,7 @@ tryopen_o_directory (void) if (x >= 0) { - close_not_cancel_no_status (x); + __close_nocancel_nostatus (x); o_directory_works = -1; } else if (errno != ENOTDIR) @@ -129,7 +129,7 @@ opendir_tail (int fd) { __set_errno (ENOTDIR); lose: - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); return NULL; } @@ -227,7 +227,7 @@ __alloc_dir (int fd, bool close_fd, int flags, const struct stat64 *statp) if (close_fd) { int save_errno = errno; - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); __set_errno (save_errno); } return NULL; diff --git a/sysdeps/posix/spawni.c b/sysdeps/posix/spawni.c index a43b841..7cbdc66 100644 --- a/sysdeps/posix/spawni.c +++ b/sysdeps/posix/spawni.c @@ -157,7 +157,7 @@ __spawni_child (void *arguments) switch (action->tag) { case spawn_do_close: - if (close_not_cancel (action->action.close_action.fd) != 0) + if (__close_nocancel (action->action.close_action.fd) != 0) { if (have_fdlimit == 0) { @@ -180,7 +180,7 @@ __spawni_child (void *arguments) with the process already at maximum number of file descriptor opened and also for multiple actions on single-open special paths (like /dev/watchdog). */ - close_not_cancel (action->action.open_action.fd); + __close_nocancel (action->action.open_action.fd); int new_fd = __open_nocancel (action->action.open_action.path, action->action.open_action.oflag @@ -197,7 +197,7 @@ __spawni_child (void *arguments) != action->action.open_action.fd) goto fail; - if (close_not_cancel (new_fd) != 0) + if (__close_nocancel (new_fd) != 0) goto fail; } } diff --git a/sysdeps/unix/sysv/linux/check_native.c b/sysdeps/unix/sysv/linux/check_native.c index 7e5a7c9..dc2da83 100644 --- a/sysdeps/unix/sysv/linux/check_native.c +++ b/sysdeps/unix/sysv/linux/check_native.c @@ -167,7 +167,7 @@ __check_native (uint32_t a1_index, int *a1_native, while (! done); out: - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); return; diff --git a/sysdeps/unix/sysv/linux/check_pf.c b/sysdeps/unix/sysv/linux/check_pf.c index 3bf221a..4dd0275 100644 --- a/sysdeps/unix/sysv/linux/check_pf.c +++ b/sysdeps/unix/sysv/linux/check_pf.c @@ -328,7 +328,7 @@ __check_pf (bool *seen_ipv4, bool *seen_ipv6, &addr_len) == 0) data = make_request (fd, nladdr.nl_pid); - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); } if (data != NULL) diff --git a/sysdeps/unix/sysv/linux/close.c b/sysdeps/unix/sysv/linux/close.c index 1ac71ce..dd21d8d 100644 --- a/sysdeps/unix/sysv/linux/close.c +++ b/sysdeps/unix/sysv/linux/close.c @@ -18,6 +18,7 @@ #include <unistd.h> #include <sysdep-cancel.h> +#include <not-cancel.h> /* Close the file descriptor FD. */ int @@ -28,3 +29,14 @@ __close (int fd) libc_hidden_def (__close) strong_alias (__close, __libc_close) weak_alias (__close, close) + +# if !IS_IN (rtld) +int +__close_nocancel (int fd) +{ + return INLINE_SYSCALL_CALL (close, fd); +} +#else +strong_alias (__libc_close, __close_nocancel) +#endif +libc_hidden_def (__close_nocancel) diff --git a/sysdeps/unix/sysv/linux/fips-private.h b/sysdeps/unix/sysv/linux/fips-private.h index 775f2c2..23833f0 100644 --- a/sysdeps/unix/sysv/linux/fips-private.h +++ b/sysdeps/unix/sysv/linux/fips-private.h @@ -50,7 +50,7 @@ fips_enabled_p (void) char buf[32]; ssize_t n; n = TEMP_FAILURE_RETRY (__read_nocancel (fd, buf, sizeof (buf) - 1)); - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); if (n > 0) { diff --git a/sysdeps/unix/sysv/linux/gethostid.c b/sysdeps/unix/sysv/linux/gethostid.c index 11c7e73..ca03877 100644 --- a/sysdeps/unix/sysv/linux/gethostid.c +++ b/sysdeps/unix/sysv/linux/gethostid.c @@ -53,7 +53,7 @@ sethostid (long int id) written = __write_nocancel (fd, &id32, sizeof (id32)); - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); return written != sizeof (id32) ? -1 : 0; } @@ -82,7 +82,7 @@ gethostid (void) { ssize_t n = __read_nocancel (fd, &id, sizeof (id)); - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); if (n == sizeof (id)) return id; diff --git a/sysdeps/unix/sysv/linux/getloadavg.c b/sysdeps/unix/sysv/linux/getloadavg.c index 64bad17..4b75741 100644 --- a/sysdeps/unix/sysv/linux/getloadavg.c +++ b/sysdeps/unix/sysv/linux/getloadavg.c @@ -43,7 +43,7 @@ getloadavg (double loadavg[], int nelem) int i; nread = __read_nocancel (fd, buf, sizeof buf - 1); - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); if (nread <= 0) return -1; buf[nread - 1] = '\0'; diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c b/sysdeps/unix/sysv/linux/getlogin_r.c index 1de746b..45c468f 100644 --- a/sysdeps/unix/sysv/linux/getlogin_r.c +++ b/sysdeps/unix/sysv/linux/getlogin_r.c @@ -43,7 +43,7 @@ __getlogin_r_loginuid (char *name, size_t namesize) char uidbuf[12]; ssize_t n = TEMP_FAILURE_RETRY (__read_nocancel (fd, uidbuf, sizeof (uidbuf))); - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); uid_t uid; char *endp; diff --git a/sysdeps/unix/sysv/linux/getsysstats.c b/sysdeps/unix/sysv/linux/getsysstats.c index d1400d6..d02c86d 100644 --- a/sysdeps/unix/sysv/linux/getsysstats.c +++ b/sysdeps/unix/sysv/linux/getsysstats.c @@ -180,7 +180,7 @@ __get_nprocs (void) } while (l < re); - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); if (result > 0) goto out; @@ -207,7 +207,7 @@ __get_nprocs (void) else if (isdigit (l[3])) ++result; - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); } else { @@ -215,7 +215,7 @@ __get_nprocs (void) if (fd != -1) { GET_NPROCS_PARSER (fd, buffer, cp, re, buffer_end, result); - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); } } diff --git a/sysdeps/unix/sysv/linux/grantpt.c b/sysdeps/unix/sysv/linux/grantpt.c index 97c6ba7..2030e07 100644 --- a/sysdeps/unix/sysv/linux/grantpt.c +++ b/sysdeps/unix/sysv/linux/grantpt.c @@ -26,7 +26,7 @@ close_all_fds (void) char *endp; long int fd = strtol (d->d_name, &endp, 10); if (*endp == '\0' && fd != PTY_FILENO && fd != dirfd (dir)) - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); } __closedir (dir); diff --git a/sysdeps/unix/sysv/linux/i386/smp.h b/sysdeps/unix/sysv/linux/i386/smp.h index eb1ac5d..320958a 100644 --- a/sysdeps/unix/sysv/linux/i386/smp.h +++ b/sysdeps/unix/sysv/linux/i386/smp.h @@ -47,7 +47,7 @@ is_smp_system (void) /* This also didn't work. We give up and say it's a UP machine. */ u.buf[0] = '\0'; - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); cp = u.buf; } diff --git a/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c b/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c index 6aab1e8..79c95b4 100644 --- a/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c +++ b/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c @@ -41,7 +41,7 @@ has_cpuclock (void) || buf[0] != '0' || buf[1] != '\n') newval = -1; - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); } itc_usable = newval; diff --git a/sysdeps/unix/sysv/linux/if_index.c b/sysdeps/unix/sysv/linux/if_index.c index 8ba5eae..56f3f13 100644 --- a/sysdeps/unix/sysv/linux/if_index.c +++ b/sysdeps/unix/sysv/linux/if_index.c @@ -47,12 +47,12 @@ __if_nametoindex (const char *ifname) if (__ioctl (fd, SIOCGIFINDEX, &ifr) < 0) { int saved_errno = errno; - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); if (saved_errno == EINVAL) __set_errno (ENOSYS); return 0; } - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); return ifr.ifr_ifindex; #endif } @@ -224,7 +224,7 @@ __if_indextoname (unsigned int ifindex, char *ifname) ifr.ifr_ifindex = ifindex; status = __ioctl (fd, SIOCGIFNAME, &ifr); - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); if (status < 0) { diff --git a/sysdeps/unix/sysv/linux/libc_fatal.c b/sysdeps/unix/sysv/linux/libc_fatal.c index c7c6a07..4bc1521 100644 --- a/sysdeps/unix/sysv/linux/libc_fatal.c +++ b/sysdeps/unix/sysv/linux/libc_fatal.c @@ -59,7 +59,7 @@ backtrace_and_maps (int do_abort, bool written, int fd) while ((n2 = __read_nocancel (fd2, buf, sizeof (buf))) > 0) if (__write_nocancel (fd, buf, n2) != n2) break; - close_not_cancel_no_status (fd2); + __close_nocancel_nostatus (fd2); } } } diff --git a/sysdeps/unix/sysv/linux/malloc-sysdep.h b/sysdeps/unix/sysv/linux/malloc-sysdep.h index 7a7acba..4bb7bc0 100644 --- a/sysdeps/unix/sysv/linux/malloc-sysdep.h +++ b/sysdeps/unix/sysv/linux/malloc-sysdep.h @@ -49,7 +49,7 @@ check_may_shrink_heap (void) char val; ssize_t n = __read_nocancel (fd, &val, 1); may_shrink_heap = n > 0 && val == '2'; - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); } } diff --git a/sysdeps/unix/sysv/linux/mq_notify.c b/sysdeps/unix/sysv/linux/mq_notify.c index 626430c..f12e6f5 100644 --- a/sysdeps/unix/sysv/linux/mq_notify.c +++ b/sysdeps/unix/sysv/linux/mq_notify.c @@ -209,7 +209,7 @@ init_mq_netlink (void) if (err != 0) { - close_not_cancel_no_status (netlink_socket); + __close_nocancel_nostatus (netlink_socket); netlink_socket = -1; } } diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h index 08ad773..684541a 100644 --- a/sysdeps/unix/sysv/linux/not-cancel.h +++ b/sysdeps/unix/sysv/linux/not-cancel.h @@ -51,13 +51,17 @@ __typeof (__write) __write_nocancel; libc_hidden_proto (__write_nocancel) /* Uncancelable close. */ -#define __close_nocancel(fd) \ - INLINE_SYSCALL (close, 1, fd) -#define close_not_cancel(fd) \ - __close_nocancel (fd) -#define close_not_cancel_no_status(fd) \ - (void) ({ INTERNAL_SYSCALL_DECL (err); \ - INTERNAL_SYSCALL (close, err, 1, (fd)); }) +__typeof (__close) __close_nocancel; +libc_hidden_proto (__close_nocancel) + +/* Non cancellable close syscall that does not also set errno in case of + failure. */ +static inline void +__close_nocancel_nostatus (int fd) +{ + INTERNAL_SYSCALL_DECL (err); + INTERNAL_SYSCALL (close, err, 1, (fd)); +} /* Uncancelable writev. */ #define writev_not_cancel_no_status(fd, iov, n) \ diff --git a/sysdeps/unix/sysv/linux/pthread_getname.c b/sysdeps/unix/sysv/linux/pthread_getname.c index 93c1dfd..d3dfee0 100644 --- a/sysdeps/unix/sysv/linux/pthread_getname.c +++ b/sysdeps/unix/sysv/linux/pthread_getname.c @@ -63,7 +63,7 @@ pthread_getname_np (pthread_t th, char *buf, size_t len) buf[n] = '\0'; } - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); return res; } diff --git a/sysdeps/unix/sysv/linux/pthread_setname.c b/sysdeps/unix/sysv/linux/pthread_setname.c index c5e9a33..2f68086 100644 --- a/sysdeps/unix/sysv/linux/pthread_setname.c +++ b/sysdeps/unix/sysv/linux/pthread_setname.c @@ -57,7 +57,7 @@ pthread_setname_np (pthread_t th, const char *name) else if (n != name_len) res = EIO; - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); return res; } diff --git a/sysdeps/unix/sysv/linux/spawni.c b/sysdeps/unix/sysv/linux/spawni.c index 4994a07..dea1650 100644 --- a/sysdeps/unix/sysv/linux/spawni.c +++ b/sysdeps/unix/sysv/linux/spawni.c @@ -205,7 +205,7 @@ __spawni_child (void *arguments) switch (action->tag) { case spawn_do_close: - if (close_not_cancel (action->action.close_action.fd) != 0) + if (__close_nocancel (action->action.close_action.fd) != 0) { if (!have_fdlimit) { @@ -228,7 +228,7 @@ __spawni_child (void *arguments) with the process already at maximum number of file descriptor opened and also for multiple actions on single-open special paths (like /dev/watchdog). */ - close_not_cancel (action->action.open_action.fd); + __close_nocancel (action->action.open_action.fd); int ret = __open_nocancel (action->action.open_action.path, action->action. @@ -247,7 +247,7 @@ __spawni_child (void *arguments) != action->action.open_action.fd) goto fail; - if (close_not_cancel (new_fd) != 0) + if (__close_nocancel (new_fd) != 0) goto fail; } } diff --git a/sysdeps/unix/sysv/linux/sysconf.c b/sysdeps/unix/sysv/linux/sysconf.c index f9becfb..773a6ac 100644 --- a/sysdeps/unix/sysv/linux/sysconf.c +++ b/sysdeps/unix/sysv/linux/sysconf.c @@ -122,7 +122,7 @@ __sysconf (int name) char buf[32]; ssize_t n; n = TEMP_FAILURE_RETRY (__read_nocancel (fd, buf, sizeof (buf) - 1)); - close_not_cancel_no_status (fd); + __close_nocancel_nostatus (fd); if (n > 0) {