[01/18] Use 64 bit time_t stat internally
Checks
Context |
Check |
Description |
dj/TryBot-apply_patch |
success
|
Patch applied to master at the time it was sent
|
Commit Message
For the legacy ABI with supports 32 bit time_t it calls the 64 bit
time directly, since the LFS symbols calls the 64 bit time_t ones
internally.
Checked on i686-linux-gnu and x86_64-linux-gnu.
---
csu/check_fds.c | 8 ++++----
elf/dl-load.c | 8 ++++----
elf/dl-misc.c | 4 ++--
elf/dl-profile.c | 4 ++--
iconv/gconv_cache.c | 4 ++--
include/dirent.h | 2 +-
include/file_change_detection.h | 6 +++---
inet/rcmd.c | 6 +++---
intl/loadmsgcat.c | 4 ++--
io/Makefile | 4 ++--
io/file_change_detection.c | 16 +++++++++-------
io/getdirname.c | 6 +++---
libio/filedoalloc.c | 2 +-
libio/fileops.c | 8 ++++----
libio/oldfileops.c | 2 +-
libio/wfileops.c | 2 +-
locale/loadarchive.c | 8 ++++----
locale/loadlocale.c | 6 +++---
nscd/nscd_helper.c | 4 ++--
nss/nss_database.c | 4 ++--
sysdeps/posix/dl-fileid.h | 4 ++--
sysdeps/posix/euidaccess.c | 4 ++--
sysdeps/posix/getaddrinfo.c | 21 +++++++++++----------
sysdeps/posix/getcwd.c | 15 ++++++++-------
sysdeps/posix/pathconf.c | 4 ++--
sysdeps/posix/sysconf.c | 4 ++--
sysdeps/posix/tempname.c | 8 ++++----
sysdeps/unix/sysv/linux/fdopendir.c | 4 ++--
sysdeps/unix/sysv/linux/fexecve.c | 4 ++--
sysdeps/unix/sysv/linux/opendir.c | 7 ++++---
sysdeps/unix/sysv/linux/pathconf.c | 5 +++--
sysdeps/unix/sysv/linux/ttyname.h | 10 ++--------
sysdeps/unix/sysv/linux/ttyname_r.c | 16 ++++++++--------
sysvipc/ftok.c | 4 ++--
time/tzfile.c | 6 +++---
35 files changed, 112 insertions(+), 112 deletions(-)
Comments
On Thu, 17 Jun 2021 08:50:47 -0300
Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote:
> For the legacy ABI with supports 32 bit time_t it calls the 64 bit
> time directly, since the LFS symbols calls the 64 bit time_t ones
> internally.
>
> Checked on i686-linux-gnu and x86_64-linux-gnu.
> ---
> csu/check_fds.c | 8 ++++----
> elf/dl-load.c | 8 ++++----
> elf/dl-misc.c | 4 ++--
> elf/dl-profile.c | 4 ++--
> iconv/gconv_cache.c | 4 ++--
> include/dirent.h | 2 +-
> include/file_change_detection.h | 6 +++---
> inet/rcmd.c | 6 +++---
> intl/loadmsgcat.c | 4 ++--
> io/Makefile | 4 ++--
> io/file_change_detection.c | 16 +++++++++-------
> io/getdirname.c | 6 +++---
> libio/filedoalloc.c | 2 +-
> libio/fileops.c | 8 ++++----
> libio/oldfileops.c | 2 +-
> libio/wfileops.c | 2 +-
> locale/loadarchive.c | 8 ++++----
> locale/loadlocale.c | 6 +++---
> nscd/nscd_helper.c | 4 ++--
> nss/nss_database.c | 4 ++--
> sysdeps/posix/dl-fileid.h | 4 ++--
> sysdeps/posix/euidaccess.c | 4 ++--
> sysdeps/posix/getaddrinfo.c | 21 +++++++++++----------
> sysdeps/posix/getcwd.c | 15 ++++++++-------
> sysdeps/posix/pathconf.c | 4 ++--
> sysdeps/posix/sysconf.c | 4 ++--
> sysdeps/posix/tempname.c | 8 ++++----
> sysdeps/unix/sysv/linux/fdopendir.c | 4 ++--
> sysdeps/unix/sysv/linux/fexecve.c | 4 ++--
> sysdeps/unix/sysv/linux/opendir.c | 7 ++++---
> sysdeps/unix/sysv/linux/pathconf.c | 5 +++--
> sysdeps/unix/sysv/linux/ttyname.h | 10 ++--------
> sysdeps/unix/sysv/linux/ttyname_r.c | 16 ++++++++--------
> sysvipc/ftok.c | 4 ++--
> time/tzfile.c | 6 +++---
> 35 files changed, 112 insertions(+), 112 deletions(-)
>
> diff --git a/csu/check_fds.c b/csu/check_fds.c
> index fbab28c284..6dc67334af 100644
> --- a/csu/check_fds.c
> +++ b/csu/check_fds.c
> @@ -69,10 +69,10 @@ check_one_fd (int fd, int mode)
> Note that the following code assumes that STDIN_FILENO,
> STDOUT_FILENO, STDERR_FILENO are the three lowest file
> decsriptor numbers, in this order. */
> - struct stat64 st;
> - if (__builtin_expect (nullfd != fd, 0)
> - || __builtin_expect (__fstat64 (fd, &st), 0) != 0
> - || __builtin_expect (S_ISCHR (st.st_mode), 1) == 0
> + struct __stat64_t64 st;
> + if (__glibc_unlikely (nullfd != fd)
> + || __glibc_likely (__fstat64_time64 (fd, &st) != 0)
> + || __glibc_unlikely (S_ISCHR (st.st_mode) == 0)
> || st.st_rdev != dev)
> /* We cannot even give an error message here since it would
> run into the same problems. */
> diff --git a/elf/dl-load.c b/elf/dl-load.c
> index 918ec7546c..a08df001af 100644
> --- a/elf/dl-load.c
> +++ b/elf/dl-load.c
> @@ -1946,11 +1946,11 @@ open_path (const char *name, size_t namelen,
> int mode, {
> /* We failed to open machine dependent library.
> Let's test whether there is any directory at all. */
> - struct stat64 st;
> + struct __stat64_t64 st;
>
> buf[buflen - namelen - 1] = '\0';
>
> - if (__stat64 (buf, &st) != 0
> + if (__stat64_time64 (buf, &st) != 0
> || ! S_ISDIR (st.st_mode))
> /* The directory does not exist or it is no
> directory. */ this_dir->status[cnt] = nonexisting;
> @@ -1968,9 +1968,9 @@ open_path (const char *name, size_t namelen,
> int mode, /* This is an extra security effort to make sure nobody can
> preload broken shared objects which are in the
> trusted directories and so exploit the bugs. */
> - struct stat64 st;
> + struct __stat64_t64 st;
>
> - if (__fstat64 (fd, &st) != 0
> + if (__fstat64_time64 (fd, &st) != 0
> || (st.st_mode & S_ISUID) == 0)
> {
> /* The shared object cannot be tested for being
> SUID diff --git a/elf/dl-misc.c b/elf/dl-misc.c
> index d4803bba4e..b256d792c6 100644
> --- a/elf/dl-misc.c
> +++ b/elf/dl-misc.c
> @@ -43,11 +43,11 @@ void *
> _dl_sysdep_read_whole_file (const char *file, size_t *sizep, int
> prot) {
> void *result = MAP_FAILED;
> - struct stat64 st;
> + struct __stat64_t64 st;
> int fd = __open64_nocancel (file, O_RDONLY | O_CLOEXEC);
> if (fd >= 0)
> {
> - if (__fstat64 (fd, &st) >= 0)
> + if (__fstat64_time64 (fd, &st) >= 0)
> {
> *sizep = st.st_size;
>
> diff --git a/elf/dl-profile.c b/elf/dl-profile.c
> index 35b03959bc..088c023d95 100644
> --- a/elf/dl-profile.c
> +++ b/elf/dl-profile.c
> @@ -185,7 +185,7 @@ _dl_start_profile (void)
> {
> char *filename;
> int fd;
> - struct stat64 st;
> + struct __stat64_t64 st;
> const ElfW(Phdr) *ph;
> ElfW(Addr) mapstart = ~((ElfW(Addr)) 0);
> ElfW(Addr) mapend = 0;
> @@ -342,7 +342,7 @@ _dl_start_profile (void)
> return;
> }
>
> - if (__fstat64 (fd, &st) < 0 || !S_ISREG (st.st_mode))
> + if (__fstat64_time64 (fd, &st) < 0 || !S_ISREG (st.st_mode))
> {
> /* Not stat'able or not a regular file => don't use it. */
> errstr = "%s: cannot stat file: %s\n";
> diff --git a/iconv/gconv_cache.c b/iconv/gconv_cache.c
> index 642cc731eb..68d6386d01 100644
> --- a/iconv/gconv_cache.c
> +++ b/iconv/gconv_cache.c
> @@ -48,7 +48,7 @@ int
> __gconv_load_cache (void)
> {
> int fd;
> - struct stat64 st;
> + struct __stat64_t64 st;
> struct gconvcache_header *header;
>
> /* We cannot use the cache if the GCONV_PATH environment variable
> is @@ -64,7 +64,7 @@ __gconv_load_cache (void)
> return -1;
>
> /* Get information about the file. */
> - if (__builtin_expect (__fstat64 (fd, &st), 0) < 0
> + if (__glibc_unlikely (__fstat64_time64 (fd, &st) < 0)
> /* We do not have to start looking at the file if it cannot
> contain at least the cache header. */
> || (size_t) st.st_size < sizeof (struct gconvcache_header))
> diff --git a/include/dirent.h b/include/dirent.h
> index f1d7e8359c..d7567f5e86 100644
> --- a/include/dirent.h
> +++ b/include/dirent.h
> @@ -49,7 +49,7 @@ extern int __versionsort64 (const struct dirent64
> **a, const struct dirent64 **b)
> __attribute_pure__;
> extern DIR *__alloc_dir (int fd, bool close_fd, int flags,
> - const struct stat64 *statp)
> + const struct __stat64_t64 *statp)
> __nonnull (4) attribute_hidden;
> extern __typeof (rewinddir) __rewinddir;
> extern __typeof (seekdir) __seekdir;
> diff --git a/include/file_change_detection.h
> b/include/file_change_detection.h index 9de2bd0b79..953de7c7fd 100644
> --- a/include/file_change_detection.h
> +++ b/include/file_change_detection.h
> @@ -33,8 +33,8 @@ struct file_change_detection
> off64_t size;
>
> ino64_t ino;
> - struct timespec mtime;
> - struct timespec ctime;
> + struct __timespec64 mtime;
> + struct __timespec64 ctime;
> };
>
> /* Returns true if *LEFT and *RIGHT describe the same version of the
> @@ -45,7 +45,7 @@ bool __file_is_unchanged (const struct
> file_change_detection *left, /* Extract file change information to
> *FILE from the stat buffer *ST. */
> void __file_change_detection_for_stat (struct file_change_detection
> *file,
> - const struct stat64 *st);
> + const struct __stat64_t64
> *st);
> /* Writes file change information for PATH to *FILE. Returns true on
> success. For benign errors, *FILE is cleared, and true is
> diff --git a/inet/rcmd.c b/inet/rcmd.c
> index 0cfdaee15e..0d6b595572 100644
> --- a/inet/rcmd.c
> +++ b/inet/rcmd.c
> @@ -468,14 +468,14 @@ ruserok (const char *rhost, int superuser,
> const char *ruser, static FILE *
> iruserfopen (const char *file, uid_t okuser)
> {
> - struct stat64 st;
> + struct __stat64_t64 st;
> char *cp = NULL;
> FILE *res = NULL;
>
> /* If not a regular file, if owned by someone other than user or
> root, if writeable by anyone but the owner, or if hardlinked
> anywhere, quit. */
> - if (__lstat64 (file, &st))
> + if (__lstat64_time64 (file, &st))
> cp = _("lstat failed");
> else if (!S_ISREG (st.st_mode))
> cp = _("not regular file");
> @@ -484,7 +484,7 @@ iruserfopen (const char *file, uid_t okuser)
> res = fopen (file, "rce");
> if (!res)
> cp = _("cannot open");
> - else if (__fstat64 (fileno (res), &st) < 0)
> + else if (__fstat64_time64 (fileno (res), &st) < 0)
> cp = _("fstat failed");
> else if (st.st_uid && st.st_uid != okuser)
> cp = _("bad owner");
> diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
> index 4fda9b0219..30588e9996 100644
> --- a/intl/loadmsgcat.c
> +++ b/intl/loadmsgcat.c
> @@ -756,7 +756,7 @@ _nl_load_domain (struct loaded_l10nfile
> *domain_file, int fd = -1;
> size_t size;
> #ifdef _LIBC
> - struct stat64 st;
> + struct __stat64_t64 st;
> #else
> struct stat st;
> #endif
> @@ -804,7 +804,7 @@ _nl_load_domain (struct loaded_l10nfile
> *domain_file, /* We must know about the size of the file. */
> if (
> #ifdef _LIBC
> - __builtin_expect (__fstat64 (fd, &st) != 0, 0)
> + __builtin_expect (__fstat64_time64 (fd, &st) != 0, 0)
> #else
> __builtin_expect (fstat (fd, &st) != 0, 0)
> #endif
> diff --git a/io/Makefile b/io/Makefile
> index ba8bd37355..1a16990205 100644
> --- a/io/Makefile
> +++ b/io/Makefile
> @@ -69,7 +69,7 @@ tests := test-utime test-stat
> test-stat2 test-lfs tst-getcwd \ tst-posix_fallocate
> tst-posix_fallocate64 \ tst-fts tst-fts-lfs tst-open-tmpfile \
> tst-copy_file_range tst-getcwd-abspath tst-lockf \
> - tst-ftw-lnk tst-file_change_detection tst-lchmod \
> + tst-ftw-lnk tst-lchmod \
> tst-ftw-bz26353 tst-stat tst-stat-lfs \
> tst-utime \
> tst-utimes \
> @@ -90,7 +90,7 @@ tests-time64 := \
> tst-utimes-time64 \
>
> # Likewise for statx, but we do not need static linking here.
> -tests-internal += tst-statx
> +tests-internal += tst-statx tst-file_change_detection
> tests-static += tst-statx
>
> ifeq ($(run-built-tests),yes)
> diff --git a/io/file_change_detection.c b/io/file_change_detection.c
> index 9871bc9166..ac5e451513 100644
> --- a/io/file_change_detection.c
> +++ b/io/file_change_detection.c
> @@ -44,7 +44,7 @@ libc_hidden_def (__file_is_unchanged)
>
> void
> __file_change_detection_for_stat (struct file_change_detection *file,
> - const struct stat64 *st)
> + const struct __stat64_t64 *st)
> {
> if (S_ISDIR (st->st_mode))
> /* Treat as empty file. */
> @@ -56,8 +56,10 @@ __file_change_detection_for_stat (struct
> file_change_detection *file, {
> file->size = st->st_size;
> file->ino = st->st_ino;
> - file->mtime = st->st_mtim;
> - file->ctime = st->st_ctim;
> + file->mtime = (struct __timespec64 ) { .tv_sec =
> st->st_mtim.tv_sec,
> + .tv_nsec =
> st->st_mtim.tv_nsec };
> + file->ctime = (struct __timespec64 ) { .tv_sec =
> st->st_ctim.tv_sec,
> + .tv_nsec =
> st->st_mtim.tv_nsec }; }
> }
> libc_hidden_def (__file_change_detection_for_stat)
> @@ -66,8 +68,8 @@ bool
> __file_change_detection_for_path (struct file_change_detection *file,
> const char *path)
> {
> - struct stat64 st;
> - if (__stat64 (path, &st) != 0)
> + struct __stat64_t64 st;
> + if (__stat64_time64 (path, &st) != 0)
> switch (errno)
> {
> case EACCES:
> @@ -104,8 +106,8 @@ __file_change_detection_for_fp (struct
> file_change_detection *file, }
> else
> {
> - struct stat64 st;
> - if (__fstat64 (__fileno (fp), &st) != 0)
> + struct __stat64_t64 st;
> + if (__fstat64_time64 (__fileno (fp), &st) != 0)
> /* If we already have a file descriptor, all errors are
> fatal. */ return false;
> else
> diff --git a/io/getdirname.c b/io/getdirname.c
> index 32b5ab4b6c..f29e910b37 100644
> --- a/io/getdirname.c
> +++ b/io/getdirname.c
> @@ -28,12 +28,12 @@ char *
> get_current_dir_name (void)
> {
> char *pwd;
> - struct stat64 dotstat, pwdstat;
> + struct __stat64_t64 dotstat, pwdstat;
>
> pwd = getenv ("PWD");
> if (pwd != NULL
> - && __stat64 (".", &dotstat) == 0
> - && __stat64 (pwd, &pwdstat) == 0
> + && __stat64_time64 (".", &dotstat) == 0
> + && __stat64_time64 (pwd, &pwdstat) == 0
> && pwdstat.st_dev == dotstat.st_dev
> && pwdstat.st_ino == dotstat.st_ino)
> /* The PWD value is correct. Use it. */
> diff --git a/libio/filedoalloc.c b/libio/filedoalloc.c
> index 7afa3cb683..c792eec88f 100644
> --- a/libio/filedoalloc.c
> +++ b/libio/filedoalloc.c
> @@ -78,7 +78,7 @@ _IO_file_doallocate (FILE *fp)
> {
> size_t size;
> char *p;
> - struct stat64 st;
> + struct __stat64_t64 st;
>
> size = BUFSIZ;
> if (fp->_fileno >= 0 && __builtin_expect (_IO_SYSSTAT (fp, &st),
> 0) >= 0) diff --git a/libio/fileops.c b/libio/fileops.c
> index a71a567547..e8ee374821 100644
> --- a/libio/fileops.c
> +++ b/libio/fileops.c
> @@ -545,7 +545,7 @@ libc_hidden_ver (_IO_new_file_underflow,
> _IO_file_underflow) static int
> mmap_remap_check (FILE *fp)
> {
> - struct stat64 st;
> + struct __stat64_t64 st;
>
> if (_IO_SYSSTAT (fp, &st) == 0
> && S_ISREG (st.st_mode) && st.st_size != 0
> @@ -663,7 +663,7 @@ decide_maybe_mmap (FILE *fp)
> file descriptors are for mmap-able objects and on 32-bit
> machines we don't want to map files which are too large since
> this would require too much virtual memory. */
> - struct stat64 st;
> + struct __stat64_t64 st;
>
> if (_IO_SYSSTAT (fp, &st) == 0
> && S_ISREG (st.st_mode) && st.st_size != 0
> @@ -962,7 +962,7 @@ _IO_new_file_seekoff (FILE *fp, off64_t offset,
> int dir, int mode) break;
> case _IO_seek_end:
> {
> - struct stat64 st;
> + struct __stat64_t64 st;
> if (_IO_SYSSTAT (fp, &st) == 0 && S_ISREG (st.st_mode))
> {
> offset += st.st_size;
> @@ -1145,7 +1145,7 @@ libc_hidden_def (_IO_file_seek)
> int
> _IO_file_stat (FILE *fp, void *st)
> {
> - return __fstat64 (fp->_fileno, (struct stat64 *) st);
> + return __fstat64_time64 (fp->_fileno, (struct __stat64_t64 *) st);
> }
> libc_hidden_def (_IO_file_stat)
>
> diff --git a/libio/oldfileops.c b/libio/oldfileops.c
> index ed235360ad..ed3c98bd6d 100644
> --- a/libio/oldfileops.c
> +++ b/libio/oldfileops.c
> @@ -487,7 +487,7 @@ _IO_old_file_seekoff (FILE *fp, off64_t offset,
> int dir, int mode) break;
> case _IO_seek_end:
> {
> - struct stat64 st;
> + struct __stat64_t64 st;
> if (_IO_SYSSTAT (fp, &st) == 0 && S_ISREG (st.st_mode))
> {
> offset += st.st_size;
> diff --git a/libio/wfileops.c b/libio/wfileops.c
> index 5d23566171..37f44780f8 100644
> --- a/libio/wfileops.c
> +++ b/libio/wfileops.c
> @@ -840,7 +840,7 @@ _IO_wfile_seekoff (FILE *fp, off64_t offset, int
> dir, int mode) break;
> case _IO_seek_end:
> {
> - struct stat64 st;
> + struct __stat64_t64 st;
> if (_IO_SYSSTAT (fp, &st) == 0 && S_ISREG (st.st_mode))
> {
> offset += st.st_size;
> diff --git a/locale/loadarchive.c b/locale/loadarchive.c
> index 4177fc8972..512769eaec 100644
> --- a/locale/loadarchive.c
> +++ b/locale/loadarchive.c
> @@ -78,7 +78,7 @@ static struct archmapped *archmapped;
> ARCHMAPPED points to this; if mapping the archive header failed,
> then headmap.ptr is null. */
> static struct archmapped headmap;
> -static struct stat64 archive_stat; /* stat of archive when header
> mapped. */ +static struct __stat64_t64 archive_stat; /* stat of
> archive when header mapped. */
> /* Record of locales that we have already loaded from the archive.
> */ struct locale_in_archive
> @@ -207,7 +207,7 @@ _nl_load_locale_from_archive (int category, const
> char **namep) /* Cannot open the archive, for whatever reason. */
> return NULL;
>
> - if (__fstat64 (fd, &archive_stat) == -1)
> + if (__fstat64_time64 (fd, &archive_stat) == -1)
> {
> /* stat failed, very strange. */
> close_and_out:
> @@ -396,7 +396,7 @@ _nl_load_locale_from_archive (int category, const
> char **namep) /* Open the file if it hasn't happened yet. */
> if (fd == -1)
> {
> - struct stat64 st;
> + struct __stat64_t64 st;
> fd = __open_nocancel (archfname,
> O_RDONLY|O_LARGEFILE|O_CLOEXEC);
> if (fd == -1)
> @@ -405,7 +405,7 @@ _nl_load_locale_from_archive (int category, const
> char **namep) /* Now verify we think this is really the same archive
> file we opened before. If it has been changed we cannot trust
> the header we read previously. */
> - if (__fstat64 (fd, &st) < 0
> + if (__fstat64_time64 (fd, &st) < 0
> || st.st_size != archive_stat.st_size
> || st.st_mtime != archive_stat.st_mtime
> || st.st_dev != archive_stat.st_dev
> diff --git a/locale/loadlocale.c b/locale/loadlocale.c
> index 9c03490883..f4e6cc9fc2 100644
> --- a/locale/loadlocale.c
> +++ b/locale/loadlocale.c
> @@ -167,7 +167,7 @@ _nl_load_locale (struct loaded_l10nfile *file,
> int category) {
> int fd;
> void *filedata;
> - struct stat64 st;
> + struct __stat64_t64 st;
> struct __locale_data *newdata;
> int save_err;
> int alloc = ld_mapped;
> @@ -180,7 +180,7 @@ _nl_load_locale (struct loaded_l10nfile *file,
> int category) /* Cannot open the file. */
> return;
>
> - if (__builtin_expect (__fstat64 (fd, &st), 0) < 0)
> + if (__glibc_unlikely (__fstat64_time64 (fd, &st) < 0))
> {
> puntfd:
> __close_nocancel_nostatus (fd);
> @@ -206,7 +206,7 @@ _nl_load_locale (struct loaded_l10nfile *file,
> int category) if (__builtin_expect (fd, 0) < 0)
> return;
>
> - if (__builtin_expect (__fstat64 (fd, &st), 0) < 0)
> + if (__glibc_unlikely (__fstat64_time64 (fd, &st) < 0))
> goto puntfd;
> }
>
> diff --git a/nscd/nscd_helper.c b/nscd/nscd_helper.c
> index 462504d828..06ba7476e5 100644
> --- a/nscd/nscd_helper.c
> +++ b/nscd/nscd_helper.c
> @@ -324,8 +324,8 @@ __nscd_get_mapping (request_type type, const char
> *key,
> if (__glibc_unlikely (n == keylen))
> {
> - struct stat64 st;
> - if (__builtin_expect (__fstat64 (mapfd, &st) != 0, 0)
> + struct __stat64_t64 st;
> + if (__glibc_unlikely (__fstat64_time64 (mapfd, &st) != 0)
> || __builtin_expect (st.st_size < sizeof (struct
> database_pers_head), 0))
> goto out_close;
> diff --git a/nss/nss_database.c b/nss/nss_database.c
> index 1e11294406..ab121cb371 100644
> --- a/nss/nss_database.c
> +++ b/nss/nss_database.c
> @@ -394,7 +394,7 @@ nss_database_check_reload_and_get (struct
> nss_database_state *local, nss_action_list *result,
> enum nss_database database_index)
> {
> - struct stat64 str;
> + struct __stat64_t64 str;
>
> /* Acquire MO is needed because the thread that sets
> reload_disabled may have loaded the configuration first, so
> synchronize with the @@ -424,7 +424,7 @@
> nss_database_check_reload_and_get (struct nss_database_state *local,
> errors here are very unlikely, but the chance that we're entering a
> container is also very unlikely, so we err on the side of both very
> unlikely things not happening at the same time. */
> - if (__stat64 ("/", &str) != 0
> + if (__stat64_time64 ("/", &str) != 0
> || (local->root_ino != 0
> && (str.st_ino != local->root_ino
> || str.st_dev != local->root_dev)))
> diff --git a/sysdeps/posix/dl-fileid.h b/sysdeps/posix/dl-fileid.h
> index 0bb6794dbe..bf437f3d71 100644
> --- a/sysdeps/posix/dl-fileid.h
> +++ b/sysdeps/posix/dl-fileid.h
> @@ -32,9 +32,9 @@ struct r_file_id
> static inline bool
> _dl_get_file_id (int fd, struct r_file_id *id)
> {
> - struct stat64 st;
> + struct __stat64_t64 st;
>
> - if (__glibc_unlikely (__fstat64 (fd, &st) < 0))
> + if (__glibc_unlikely (__fstat64_time64 (fd, &st) < 0))
> return false;
>
> id->dev = st.st_dev;
> diff --git a/sysdeps/posix/euidaccess.c b/sysdeps/posix/euidaccess.c
> index 26ebb432a2..86f3285471 100644
> --- a/sysdeps/posix/euidaccess.c
> +++ b/sysdeps/posix/euidaccess.c
> @@ -119,7 +119,7 @@ int group_member ();
> int
> euidaccess (const char *path, int mode)
> {
> - struct stat64 stats;
> + struct __stat64_t64 stats;
> int granted;
>
> #ifdef _LIBC
> @@ -140,7 +140,7 @@ euidaccess (const char *path, int mode)
> return access (path, mode);
> #endif
>
> - if (__stat64 (path, &stats))
> + if (__stat64_time64 (path, &stats))
> return -1;
>
> mode &= (X_OK | W_OK | R_OK); /* Clear any bogus bits. */
> diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
> index b7e1aee80f..b2831508c4 100644
> --- a/sysdeps/posix/getaddrinfo.c
> +++ b/sysdeps/posix/getaddrinfo.c
> @@ -1636,16 +1636,17 @@ static int gaiconf_reload_flag_ever_set;
> /* Last modification time. */
> #ifdef _STATBUF_ST_NSEC
>
> -static struct timespec gaiconf_mtime;
> +static struct __timespec64 gaiconf_mtime;
>
> static inline void
> -save_gaiconf_mtime (const struct stat64 *st)
> +save_gaiconf_mtime (const struct __stat64_t64 *st)
> {
> - gaiconf_mtime = st->st_mtim;
> + gaiconf_mtime = (struct __timespec64) { .tv_sec =
> st->st_mtim.tv_sec,
> + .tv_nsec =
> st->st_mtim.tv_nsec }; }
>
> static inline bool
> -check_gaiconf_mtime (const struct stat64 *st)
> +check_gaiconf_mtime (const struct __stat64_t64 *st)
> {
> return (st->st_mtim.tv_sec == gaiconf_mtime.tv_sec
> && st->st_mtim.tv_nsec == gaiconf_mtime.tv_nsec);
> @@ -1656,13 +1657,13 @@ check_gaiconf_mtime (const struct stat64 *st)
> static time_t gaiconf_mtime;
>
> static inline void
> -save_gaiconf_mtime (const struct stat64 *st)
> +save_gaiconf_mtime (const struct __stat64_t64 *st)
> {
> gaiconf_mtime = st->st_mtime;
> }
>
> static inline bool
> -check_gaiconf_mtime (const struct stat64 *st)
> +check_gaiconf_mtime (const struct __stat64_t64 *st)
> {
> return st->st_mtime == gaiconf_mtime;
> }
> @@ -1777,8 +1778,8 @@ gaiconf_init (void)
> FILE *fp = fopen (GAICONF_FNAME, "rce");
> if (fp != NULL)
> {
> - struct stat64 st;
> - if (__fstat64 (fileno (fp), &st) != 0)
> + struct __stat64_t64 st;
> + if (__fstat64_time64 (fileno (fp), &st) != 0)
> {
> fclose (fp);
> goto no_file;
> @@ -2130,8 +2131,8 @@ gaiconf_init (void)
> static void
> gaiconf_reload (void)
> {
> - struct stat64 st;
> - if (__stat64 (GAICONF_FNAME, &st) != 0
> + struct __stat64_t64 st;
> + if (__stat64_time64 (GAICONF_FNAME, &st) != 0
> || !check_gaiconf_mtime (&st))
> gaiconf_init ();
> }
> diff --git a/sysdeps/posix/getcwd.c b/sysdeps/posix/getcwd.c
> index f11644aae7..13680026ff 100644
> --- a/sysdeps/posix/getcwd.c
> +++ b/sysdeps/posix/getcwd.c
> @@ -183,7 +183,7 @@ __getcwd_generic (char *buf, size_t size)
> ino_t rootino, thisino;
> char *dir;
> register char *dirp;
> - struct stat64 st;
> + struct __stat64_t64 st;
> size_t allocated = size;
> size_t used;
>
> @@ -249,12 +249,12 @@ __getcwd_generic (char *buf, size_t size)
> dirp = dir + allocated;
> *--dirp = '\0';
>
> - if (__lstat64 (".", &st) < 0)
> + if (__lstat64_time64 (".", &st) < 0)
> goto lose;
> thisdev = st.st_dev;
> thisino = st.st_ino;
>
> - if (__lstat64 ("/", &st) < 0)
> + if (__lstat64_time64 ("/", &st) < 0)
> goto lose;
> rootdev = st.st_dev;
> rootino = st.st_ino;
> @@ -276,12 +276,12 @@ __getcwd_generic (char *buf, size_t size)
> if (fd < 0)
> goto lose;
> fd_needs_closing = true;
> - parent_status = __fstat64 (fd, &st);
> + parent_status = __fstat64_time64 (fd, &st);
> #else
> dotlist[dotlen++] = '.';
> dotlist[dotlen++] = '.';
> dotlist[dotlen] = '\0';
> - parent_status = __lstat64 (dotlist, &st);
> + parent_status = __lstat64_time64 (dotlist, &st);
> #endif
> if (parent_status != 0)
> goto lose;
> @@ -353,7 +353,8 @@ __getcwd_generic (char *buf, size_t size)
> {
> int entry_status;
> #if HAVE_OPENAT_SUPPORT
> - entry_status = __fstatat64 (fd, d->d_name, &st,
> AT_SYMLINK_NOFOLLOW);
> + entry_status = __fstatat64_time64 (fd, d->d_name, &st,
> + AT_SYMLINK_NOFOLLOW);
> #else
> /* Compute size needed for this file name, or for the
> file name ".." in the same directory, whichever is larger.
> @@ -390,7 +391,7 @@ __getcwd_generic (char *buf, size_t size)
> }
>
> memcpy (dotlist + dotlen, d->d_name, _D_ALLOC_NAMLEN
> (d));
> - entry_status = __lstat64 (dotlist, &st);
> + entry_status = __lstat64_time64 (dotlist, &st);
> #endif
> /* We don't fail here if we cannot stat() a directory
> entry. This can happen when (network) file systems fail. If this
> diff --git a/sysdeps/posix/pathconf.c b/sysdeps/posix/pathconf.c
> index 9eb17d1536..89fcfad49d 100644
> --- a/sysdeps/posix/pathconf.c
> +++ b/sysdeps/posix/pathconf.c
> @@ -129,9 +129,9 @@ __pathconf (const char *path, int name)
> #ifdef _POSIX_ASYNC_IO
> {
> /* AIO is only allowed on regular files and block devices.
> */
> - struct stat64 st;
> + struct __stat64_t64 st;
>
> - if (__stat64 (path, &st) < 0
> + if (__stat64_time64 (path, &st) < 0
> || (! S_ISREG (st.st_mode) && ! S_ISBLK (st.st_mode)))
> return -1;
> else
> diff --git a/sysdeps/posix/sysconf.c b/sysdeps/posix/sysconf.c
> index 54d6046d00..3e8ec5cd51 100644
> --- a/sysdeps/posix/sysconf.c
> +++ b/sysdeps/posix/sysconf.c
> @@ -1215,8 +1215,8 @@ __sysconf_check_spec (const char *spec)
> "/POSIX_V6_", sizeof ("/POSIX_V6_") - 1),
> spec, speclen + 1);
>
> - struct stat64 st;
> - long int ret = __stat64 (name, &st) >= 0 ? 1 : -1;
> + struct __stat64_t64 st;
> + long int ret = __stat64_time64 (name, &st) >= 0 ? 1 : -1;
>
> __set_errno (save_errno);
> return ret;
> diff --git a/sysdeps/posix/tempname.c b/sysdeps/posix/tempname.c
> index 5f804b38d7..ff38f1e31f 100644
> --- a/sysdeps/posix/tempname.c
> +++ b/sysdeps/posix/tempname.c
> @@ -55,14 +55,14 @@
> #include <time.h>
>
> #if _LIBC
> -# define struct_stat64 struct stat64
> +# define struct_stat64 struct __stat64_t64
> # define __secure_getenv __libc_secure_getenv
> #else
> # define struct_stat64 struct stat
> # define __gen_tempname gen_tempname
> # define __mkdir mkdir
> # define __open open
> -# define __lstat64(file, buf) lstat (file, buf)
> +# define __lstat64_time64(file, buf) lstat (file, buf)
> # define __stat64(file, buf) stat (file, buf)
> # define __getrandom getrandom
> # define __clock_gettime64 clock_gettime
> @@ -99,7 +99,7 @@ static int
> direxists (const char *dir)
> {
> struct_stat64 buf;
> - return __stat64 (dir, &buf) == 0 && S_ISDIR (buf.st_mode);
> + return __stat64_time64 (dir, &buf) == 0 && S_ISDIR (buf.st_mode);
> }
>
> /* Path search algorithm, for tmpnam, tmpfile, etc. If DIR is
> @@ -191,7 +191,7 @@ try_nocreate (char *tmpl, void *flags _GL_UNUSED)
> {
> struct_stat64 st;
>
> - if (__lstat64 (tmpl, &st) == 0 || errno == EOVERFLOW)
> + if (__lstat64_time64 (tmpl, &st) == 0 || errno == EOVERFLOW)
> __set_errno (EEXIST);
> return errno == ENOENT ? 0 : -1;
> }
> diff --git a/sysdeps/unix/sysv/linux/fdopendir.c
> b/sysdeps/unix/sysv/linux/fdopendir.c index ede43f2485..32ec10e206
> 100644 --- a/sysdeps/unix/sysv/linux/fdopendir.c
> +++ b/sysdeps/unix/sysv/linux/fdopendir.c
> @@ -27,9 +27,9 @@
> DIR *
> __fdopendir (int fd)
> {
> - struct stat64 statbuf;
> + struct __stat64_t64 statbuf;
>
> - if (__builtin_expect (__fstat64 (fd, &statbuf), 0) < 0)
> + if (__glibc_unlikely (__fstat64_time64 (fd, &statbuf) < 0))
> return NULL;
> if (__glibc_unlikely (! S_ISDIR (statbuf.st_mode)))
> {
> diff --git a/sysdeps/unix/sysv/linux/fexecve.c
> b/sysdeps/unix/sysv/linux/fexecve.c index df25c2acb8..4dfcaeedc1
> 100644 --- a/sysdeps/unix/sysv/linux/fexecve.c
> +++ b/sysdeps/unix/sysv/linux/fexecve.c
> @@ -58,8 +58,8 @@ fexecve (int fd, char *const argv[], char *const
> envp[])
> /* We come here only if the 'execve' call fails. Determine whether
> /proc is mounted. If not we return ENOSYS. */
> - struct stat64 st;
> - if (__stat64 ("/proc/self/fd", &st) != 0 && errno == ENOENT)
> + struct __stat64_t64 st;
> + if (__stat64_time64 ("/proc/self/fd", &st) != 0 && errno == ENOENT)
> save = ENOSYS;
>
> __set_errno (save);
> diff --git a/sysdeps/unix/sysv/linux/opendir.c
> b/sysdeps/unix/sysv/linux/opendir.c index 4020a826f9..48f254d169
> 100644 --- a/sysdeps/unix/sysv/linux/opendir.c
> +++ b/sysdeps/unix/sysv/linux/opendir.c
> @@ -49,8 +49,8 @@ opendir_tail (int fd)
> /* Now make sure this really is a directory and nothing changed
> since the `stat' call. The S_ISDIR check is superfluous if
> O_DIRECTORY works, but it's cheap and we need the stat call for
> st_blksize anyway. */
> - struct stat64 statbuf;
> - if (__glibc_unlikely (__fstat64 (fd, &statbuf) < 0))
> + struct __stat64_t64 statbuf;
> + if (__glibc_unlikely (__fstat64_time64 (fd, &statbuf) < 0))
> goto lose;
> if (__glibc_unlikely (! S_ISDIR (statbuf.st_mode)))
> {
> @@ -88,7 +88,8 @@ __opendir (const char *name)
> weak_alias (__opendir, opendir)
>
> DIR *
> -__alloc_dir (int fd, bool close_fd, int flags, const struct stat64
> *statp) +__alloc_dir (int fd, bool close_fd, int flags,
> + const struct __stat64_t64 *statp)
> {
> /* We have to set the close-on-exit flag if the user provided the
> file descriptor. */
> diff --git a/sysdeps/unix/sysv/linux/pathconf.c
> b/sysdeps/unix/sysv/linux/pathconf.c index f37e8aaf68..b599a66c93
> 100644 --- a/sysdeps/unix/sysv/linux/pathconf.c
> +++ b/sysdeps/unix/sysv/linux/pathconf.c
> @@ -65,9 +65,10 @@ distinguish_extX (const struct statfs *fsbuf,
> const char *file, int fd) {
> char buf[64];
> char path[PATH_MAX];
> - struct stat64 st;
> + struct __stat64_t64 st;
>
> - if ((file == NULL ? __fstat64 (fd, &st) : __stat64 (file, &st)) !=
> 0)
> + if ((file == NULL ? __fstat64_time64 (fd, &st)
> + : __stat64_time64 (file, &st)) != 0)
> /* Strange. The statfd call worked, but stat fails. Default to
> the more pessimistic value. */
> return EXT2_LINK_MAX;
> diff --git a/sysdeps/unix/sysv/linux/ttyname.h
> b/sysdeps/unix/sysv/linux/ttyname.h index 0a0048cc02..5dcbfef973
> 100644 --- a/sysdeps/unix/sysv/linux/ttyname.h
> +++ b/sysdeps/unix/sysv/linux/ttyname.h
> @@ -25,24 +25,18 @@
> linux/Documentation/devices.txt (on linux < 4.10) or
> linux/Documentation/admin-guide/devices.txt (on linux >= 4.10).
> */ static inline bool
> -is_pty (struct stat64 *sb)
> +is_pty (struct __stat64_t64 *sb)
> {
> -#ifdef _STATBUF_ST_RDEV
> int m = __gnu_dev_major (sb->st_rdev);
> return (136 <= m && m <= 143);
> -#else
> - return false;
> -#endif
> }
>
> static inline bool
> -is_mytty (const struct stat64 *mytty, const struct stat64 *maybe)
> +is_mytty (const struct __stat64_t64 *mytty, const struct
> __stat64_t64 *maybe) {
> return (maybe->st_ino == mytty->st_ino
> && maybe->st_dev == mytty->st_dev
> -#ifdef _STATBUF_ST_RDEV
> && S_ISCHR (maybe->st_mode)
> && maybe->st_rdev == mytty->st_rdev
> -#endif
> );
> }
> diff --git a/sysdeps/unix/sysv/linux/ttyname_r.c
> b/sysdeps/unix/sysv/linux/ttyname_r.c index 899a851a83..9ef9f42883
> 100644 --- a/sysdeps/unix/sysv/linux/ttyname_r.c
> +++ b/sysdeps/unix/sysv/linux/ttyname_r.c
> @@ -31,15 +31,15 @@
> #include "ttyname.h"
>
> static int getttyname_r (char *buf, size_t buflen,
> - const struct stat64 *mytty, int save,
> + const struct __stat64_t64 *mytty, int save,
> int *dostat);
>
> static int
> attribute_compat_text_section
> -getttyname_r (char *buf, size_t buflen, const struct stat64 *mytty,
> +getttyname_r (char *buf, size_t buflen, const struct __stat64_t64
> *mytty, int save, int *dostat)
> {
> - struct stat64 st;
> + struct __stat64_t64 st;
> DIR *dirstream;
> struct dirent64 *d;
> size_t devlen = strlen (buf);
> @@ -71,7 +71,7 @@ getttyname_r (char *buf, size_t buflen, const
> struct stat64 *mytty, cp = __stpncpy (buf + devlen, d->d_name,
> needed); cp[0] = '\0';
>
> - if (__stat64 (buf, &st) == 0
> + if (__stat64_time64 (buf, &st) == 0
> && is_mytty (mytty, &st))
> {
> (void) __closedir (dirstream);
> @@ -93,7 +93,7 @@ int
> __ttyname_r (int fd, char *buf, size_t buflen)
> {
> struct fd_to_filename filename;
> - struct stat64 st, st1;
> + struct __stat64_t64 st, st1;
> int dostat = 0;
> int doispty = 0;
> int save = errno;
> @@ -118,7 +118,7 @@ __ttyname_r (int fd, char *buf, size_t buflen)
> if (__glibc_unlikely (__tcgetattr (fd, &term) < 0))
> return errno;
>
> - if (__fstat64 (fd, &st) < 0)
> + if (__fstat64_time64 (fd, &st) < 0)
> return errno;
>
> /* We try using the /proc filesystem. */
> @@ -144,7 +144,7 @@ __ttyname_r (int fd, char *buf, size_t buflen)
>
> /* Verify readlink result, fall back on iterating through
> devices. */ if (buf[0] == '/'
> - && __stat64 (buf, &st1) == 0
> + && __stat64_time64 (buf, &st1) == 0
> && is_mytty (&st, &st1))
> return 0;
>
> @@ -155,7 +155,7 @@ __ttyname_r (int fd, char *buf, size_t buflen)
> memcpy (buf, "/dev/pts/", sizeof ("/dev/pts/"));
> buflen -= sizeof ("/dev/pts/") - 1;
>
> - if (__stat64 (buf, &st1) == 0 && S_ISDIR (st1.st_mode))
> + if (__stat64_time64 (buf, &st1) == 0 && S_ISDIR (st1.st_mode))
> {
> ret = getttyname_r (buf, buflen, &st, save,
> &dostat);
> diff --git a/sysvipc/ftok.c b/sysvipc/ftok.c
> index 2e39c74415..bd633bd395 100644
> --- a/sysvipc/ftok.c
> +++ b/sysvipc/ftok.c
> @@ -22,10 +22,10 @@
> key_t
> ftok (const char *pathname, int proj_id)
> {
> - struct stat64 st;
> + struct __stat64_t64 st;
> key_t key;
>
> - if (__stat64 (pathname, &st) < 0)
> + if (__stat64_time64 (pathname, &st) < 0)
> return (key_t) -1;
>
> key = ((st.st_ino & 0xffff) | ((st.st_dev & 0xff) << 16)
> diff --git a/time/tzfile.c b/time/tzfile.c
> index 040a5e341f..4377018a55 100644
> --- a/time/tzfile.c
> +++ b/time/tzfile.c
> @@ -150,9 +150,9 @@ __tzfile_read (const char *file, size_t extra,
> char **extrap) }
>
> /* If we were already using tzfile, check whether the file
> changed. */
> - struct stat64 st;
> + struct __stat64_t64 st;
> if (was_using_tzfile
> - && __stat64 (file, &st) == 0
> + && __stat64_time64 (file, &st) == 0
> && tzfile_ino == st.st_ino && tzfile_dev == st.st_dev
> && tzfile_mtime == st.st_mtime)
> goto done; /* Nothing to do. */
> @@ -164,7 +164,7 @@ __tzfile_read (const char *file, size_t extra,
> char **extrap) goto ret_free_transitions;
>
> /* Get information about the file we are actually using. */
> - if (__fstat64 (__fileno (f), &st) != 0)
> + if (__fstat64_time64 (__fileno (f), &st) != 0)
> goto lose;
>
> free ((void *) transitions);
Reviewed-by: Lukasz Majewski <lukma@denx.de>
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
* Adhemerval Zanella via Libc-alpha:
> diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
> index b7e1aee80f..b2831508c4 100644
> --- a/sysdeps/posix/getaddrinfo.c
> +++ b/sysdeps/posix/getaddrinfo.c
> @@ -1636,16 +1636,17 @@ static int gaiconf_reload_flag_ever_set;
> /* Last modification time. */
> #ifdef _STATBUF_ST_NSEC
>
> -static struct timespec gaiconf_mtime;
> +static struct __timespec64 gaiconf_mtime;
>
> static inline void
> -save_gaiconf_mtime (const struct stat64 *st)
> +save_gaiconf_mtime (const struct __stat64_t64 *st)
> {
> - gaiconf_mtime = st->st_mtim;
> + gaiconf_mtime = (struct __timespec64) { .tv_sec = st->st_mtim.tv_sec,
> + .tv_nsec = st->st_mtim.tv_nsec };
> }
>
> static inline bool
> -check_gaiconf_mtime (const struct stat64 *st)
> +check_gaiconf_mtime (const struct __stat64_t64 *st)
> {
> return (st->st_mtim.tv_sec == gaiconf_mtime.tv_sec
> && st->st_mtim.tv_nsec == gaiconf_mtime.tv_nsec);
> @@ -1656,13 +1657,13 @@ check_gaiconf_mtime (const struct stat64 *st)
> static time_t gaiconf_mtime;
>
> static inline void
> -save_gaiconf_mtime (const struct stat64 *st)
> +save_gaiconf_mtime (const struct __stat64_t64 *st)
> {
> gaiconf_mtime = st->st_mtime;
> }
>
Apparently this caused:
../sysdeps/posix/getaddrinfo.c: In function ‘save_gaiconf_mtime’:
../sysdeps/posix/getaddrinfo.c:1644:19: error: incompatible types when assigning to type ‘struct __timespec64’ from type ‘struct timespec’
1644 | gaiconf_mtime = st->st_mtim;
| ^~
I do not know the state of 64-bit time_t on Hurd.
Thanks,
Florian
On 22/06/2021 16:37, Florian Weimer wrote:
> * Adhemerval Zanella via Libc-alpha:
>
>> diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
>> index b7e1aee80f..b2831508c4 100644
>> --- a/sysdeps/posix/getaddrinfo.c
>> +++ b/sysdeps/posix/getaddrinfo.c
>> @@ -1636,16 +1636,17 @@ static int gaiconf_reload_flag_ever_set;
>> /* Last modification time. */
>> #ifdef _STATBUF_ST_NSEC
>>
>> -static struct timespec gaiconf_mtime;
>> +static struct __timespec64 gaiconf_mtime;
>>
>> static inline void
>> -save_gaiconf_mtime (const struct stat64 *st)
>> +save_gaiconf_mtime (const struct __stat64_t64 *st)
>> {
>> - gaiconf_mtime = st->st_mtim;
>> + gaiconf_mtime = (struct __timespec64) { .tv_sec = st->st_mtim.tv_sec,
>> + .tv_nsec = st->st_mtim.tv_nsec };
>> }
>>
>> static inline bool
>> -check_gaiconf_mtime (const struct stat64 *st)
>> +check_gaiconf_mtime (const struct __stat64_t64 *st)
>> {
>> return (st->st_mtim.tv_sec == gaiconf_mtime.tv_sec
>> && st->st_mtim.tv_nsec == gaiconf_mtime.tv_nsec);
>> @@ -1656,13 +1657,13 @@ check_gaiconf_mtime (const struct stat64 *st)
>> static time_t gaiconf_mtime;
>>
>> static inline void
>> -save_gaiconf_mtime (const struct stat64 *st)
>> +save_gaiconf_mtime (const struct __stat64_t64 *st)
>> {
>> gaiconf_mtime = st->st_mtime;
>> }
>>
>
> Apparently this caused:
>
> ../sysdeps/posix/getaddrinfo.c: In function ‘save_gaiconf_mtime’:
> ../sysdeps/posix/getaddrinfo.c:1644:19: error: incompatible types when assigning to type ‘struct __timespec64’ from type ‘struct timespec’
> 1644 | gaiconf_mtime = st->st_mtim;
> | ^~
>
> I do not know the state of 64-bit time_t on Hurd.
It should have re-checked against Hurd... I will fix it (hurd does not
have 64-bit time_t support afaik).
@@ -69,10 +69,10 @@ check_one_fd (int fd, int mode)
Note that the following code assumes that STDIN_FILENO,
STDOUT_FILENO, STDERR_FILENO are the three lowest file
decsriptor numbers, in this order. */
- struct stat64 st;
- if (__builtin_expect (nullfd != fd, 0)
- || __builtin_expect (__fstat64 (fd, &st), 0) != 0
- || __builtin_expect (S_ISCHR (st.st_mode), 1) == 0
+ struct __stat64_t64 st;
+ if (__glibc_unlikely (nullfd != fd)
+ || __glibc_likely (__fstat64_time64 (fd, &st) != 0)
+ || __glibc_unlikely (S_ISCHR (st.st_mode) == 0)
|| st.st_rdev != dev)
/* We cannot even give an error message here since it would
run into the same problems. */
@@ -1946,11 +1946,11 @@ open_path (const char *name, size_t namelen, int mode,
{
/* We failed to open machine dependent library. Let's
test whether there is any directory at all. */
- struct stat64 st;
+ struct __stat64_t64 st;
buf[buflen - namelen - 1] = '\0';
- if (__stat64 (buf, &st) != 0
+ if (__stat64_time64 (buf, &st) != 0
|| ! S_ISDIR (st.st_mode))
/* The directory does not exist or it is no directory. */
this_dir->status[cnt] = nonexisting;
@@ -1968,9 +1968,9 @@ open_path (const char *name, size_t namelen, int mode,
/* This is an extra security effort to make sure nobody can
preload broken shared objects which are in the trusted
directories and so exploit the bugs. */
- struct stat64 st;
+ struct __stat64_t64 st;
- if (__fstat64 (fd, &st) != 0
+ if (__fstat64_time64 (fd, &st) != 0
|| (st.st_mode & S_ISUID) == 0)
{
/* The shared object cannot be tested for being SUID
@@ -43,11 +43,11 @@ void *
_dl_sysdep_read_whole_file (const char *file, size_t *sizep, int prot)
{
void *result = MAP_FAILED;
- struct stat64 st;
+ struct __stat64_t64 st;
int fd = __open64_nocancel (file, O_RDONLY | O_CLOEXEC);
if (fd >= 0)
{
- if (__fstat64 (fd, &st) >= 0)
+ if (__fstat64_time64 (fd, &st) >= 0)
{
*sizep = st.st_size;
@@ -185,7 +185,7 @@ _dl_start_profile (void)
{
char *filename;
int fd;
- struct stat64 st;
+ struct __stat64_t64 st;
const ElfW(Phdr) *ph;
ElfW(Addr) mapstart = ~((ElfW(Addr)) 0);
ElfW(Addr) mapend = 0;
@@ -342,7 +342,7 @@ _dl_start_profile (void)
return;
}
- if (__fstat64 (fd, &st) < 0 || !S_ISREG (st.st_mode))
+ if (__fstat64_time64 (fd, &st) < 0 || !S_ISREG (st.st_mode))
{
/* Not stat'able or not a regular file => don't use it. */
errstr = "%s: cannot stat file: %s\n";
@@ -48,7 +48,7 @@ int
__gconv_load_cache (void)
{
int fd;
- struct stat64 st;
+ struct __stat64_t64 st;
struct gconvcache_header *header;
/* We cannot use the cache if the GCONV_PATH environment variable is
@@ -64,7 +64,7 @@ __gconv_load_cache (void)
return -1;
/* Get information about the file. */
- if (__builtin_expect (__fstat64 (fd, &st), 0) < 0
+ if (__glibc_unlikely (__fstat64_time64 (fd, &st) < 0)
/* We do not have to start looking at the file if it cannot contain
at least the cache header. */
|| (size_t) st.st_size < sizeof (struct gconvcache_header))
@@ -49,7 +49,7 @@ extern int __versionsort64 (const struct dirent64 **a,
const struct dirent64 **b)
__attribute_pure__;
extern DIR *__alloc_dir (int fd, bool close_fd, int flags,
- const struct stat64 *statp)
+ const struct __stat64_t64 *statp)
__nonnull (4) attribute_hidden;
extern __typeof (rewinddir) __rewinddir;
extern __typeof (seekdir) __seekdir;
@@ -33,8 +33,8 @@ struct file_change_detection
off64_t size;
ino64_t ino;
- struct timespec mtime;
- struct timespec ctime;
+ struct __timespec64 mtime;
+ struct __timespec64 ctime;
};
/* Returns true if *LEFT and *RIGHT describe the same version of the
@@ -45,7 +45,7 @@ bool __file_is_unchanged (const struct file_change_detection *left,
/* Extract file change information to *FILE from the stat buffer
*ST. */
void __file_change_detection_for_stat (struct file_change_detection *file,
- const struct stat64 *st);
+ const struct __stat64_t64 *st);
/* Writes file change information for PATH to *FILE. Returns true on
success. For benign errors, *FILE is cleared, and true is
@@ -468,14 +468,14 @@ ruserok (const char *rhost, int superuser, const char *ruser,
static FILE *
iruserfopen (const char *file, uid_t okuser)
{
- struct stat64 st;
+ struct __stat64_t64 st;
char *cp = NULL;
FILE *res = NULL;
/* If not a regular file, if owned by someone other than user or
root, if writeable by anyone but the owner, or if hardlinked
anywhere, quit. */
- if (__lstat64 (file, &st))
+ if (__lstat64_time64 (file, &st))
cp = _("lstat failed");
else if (!S_ISREG (st.st_mode))
cp = _("not regular file");
@@ -484,7 +484,7 @@ iruserfopen (const char *file, uid_t okuser)
res = fopen (file, "rce");
if (!res)
cp = _("cannot open");
- else if (__fstat64 (fileno (res), &st) < 0)
+ else if (__fstat64_time64 (fileno (res), &st) < 0)
cp = _("fstat failed");
else if (st.st_uid && st.st_uid != okuser)
cp = _("bad owner");
@@ -756,7 +756,7 @@ _nl_load_domain (struct loaded_l10nfile *domain_file,
int fd = -1;
size_t size;
#ifdef _LIBC
- struct stat64 st;
+ struct __stat64_t64 st;
#else
struct stat st;
#endif
@@ -804,7 +804,7 @@ _nl_load_domain (struct loaded_l10nfile *domain_file,
/* We must know about the size of the file. */
if (
#ifdef _LIBC
- __builtin_expect (__fstat64 (fd, &st) != 0, 0)
+ __builtin_expect (__fstat64_time64 (fd, &st) != 0, 0)
#else
__builtin_expect (fstat (fd, &st) != 0, 0)
#endif
@@ -69,7 +69,7 @@ tests := test-utime test-stat test-stat2 test-lfs tst-getcwd \
tst-posix_fallocate tst-posix_fallocate64 \
tst-fts tst-fts-lfs tst-open-tmpfile \
tst-copy_file_range tst-getcwd-abspath tst-lockf \
- tst-ftw-lnk tst-file_change_detection tst-lchmod \
+ tst-ftw-lnk tst-lchmod \
tst-ftw-bz26353 tst-stat tst-stat-lfs \
tst-utime \
tst-utimes \
@@ -90,7 +90,7 @@ tests-time64 := \
tst-utimes-time64 \
# Likewise for statx, but we do not need static linking here.
-tests-internal += tst-statx
+tests-internal += tst-statx tst-file_change_detection
tests-static += tst-statx
ifeq ($(run-built-tests),yes)
@@ -44,7 +44,7 @@ libc_hidden_def (__file_is_unchanged)
void
__file_change_detection_for_stat (struct file_change_detection *file,
- const struct stat64 *st)
+ const struct __stat64_t64 *st)
{
if (S_ISDIR (st->st_mode))
/* Treat as empty file. */
@@ -56,8 +56,10 @@ __file_change_detection_for_stat (struct file_change_detection *file,
{
file->size = st->st_size;
file->ino = st->st_ino;
- file->mtime = st->st_mtim;
- file->ctime = st->st_ctim;
+ file->mtime = (struct __timespec64 ) { .tv_sec = st->st_mtim.tv_sec,
+ .tv_nsec = st->st_mtim.tv_nsec };
+ file->ctime = (struct __timespec64 ) { .tv_sec = st->st_ctim.tv_sec,
+ .tv_nsec = st->st_mtim.tv_nsec };
}
}
libc_hidden_def (__file_change_detection_for_stat)
@@ -66,8 +68,8 @@ bool
__file_change_detection_for_path (struct file_change_detection *file,
const char *path)
{
- struct stat64 st;
- if (__stat64 (path, &st) != 0)
+ struct __stat64_t64 st;
+ if (__stat64_time64 (path, &st) != 0)
switch (errno)
{
case EACCES:
@@ -104,8 +106,8 @@ __file_change_detection_for_fp (struct file_change_detection *file,
}
else
{
- struct stat64 st;
- if (__fstat64 (__fileno (fp), &st) != 0)
+ struct __stat64_t64 st;
+ if (__fstat64_time64 (__fileno (fp), &st) != 0)
/* If we already have a file descriptor, all errors are fatal. */
return false;
else
@@ -28,12 +28,12 @@ char *
get_current_dir_name (void)
{
char *pwd;
- struct stat64 dotstat, pwdstat;
+ struct __stat64_t64 dotstat, pwdstat;
pwd = getenv ("PWD");
if (pwd != NULL
- && __stat64 (".", &dotstat) == 0
- && __stat64 (pwd, &pwdstat) == 0
+ && __stat64_time64 (".", &dotstat) == 0
+ && __stat64_time64 (pwd, &pwdstat) == 0
&& pwdstat.st_dev == dotstat.st_dev
&& pwdstat.st_ino == dotstat.st_ino)
/* The PWD value is correct. Use it. */
@@ -78,7 +78,7 @@ _IO_file_doallocate (FILE *fp)
{
size_t size;
char *p;
- struct stat64 st;
+ struct __stat64_t64 st;
size = BUFSIZ;
if (fp->_fileno >= 0 && __builtin_expect (_IO_SYSSTAT (fp, &st), 0) >= 0)
@@ -545,7 +545,7 @@ libc_hidden_ver (_IO_new_file_underflow, _IO_file_underflow)
static int
mmap_remap_check (FILE *fp)
{
- struct stat64 st;
+ struct __stat64_t64 st;
if (_IO_SYSSTAT (fp, &st) == 0
&& S_ISREG (st.st_mode) && st.st_size != 0
@@ -663,7 +663,7 @@ decide_maybe_mmap (FILE *fp)
file descriptors are for mmap-able objects and on 32-bit
machines we don't want to map files which are too large since
this would require too much virtual memory. */
- struct stat64 st;
+ struct __stat64_t64 st;
if (_IO_SYSSTAT (fp, &st) == 0
&& S_ISREG (st.st_mode) && st.st_size != 0
@@ -962,7 +962,7 @@ _IO_new_file_seekoff (FILE *fp, off64_t offset, int dir, int mode)
break;
case _IO_seek_end:
{
- struct stat64 st;
+ struct __stat64_t64 st;
if (_IO_SYSSTAT (fp, &st) == 0 && S_ISREG (st.st_mode))
{
offset += st.st_size;
@@ -1145,7 +1145,7 @@ libc_hidden_def (_IO_file_seek)
int
_IO_file_stat (FILE *fp, void *st)
{
- return __fstat64 (fp->_fileno, (struct stat64 *) st);
+ return __fstat64_time64 (fp->_fileno, (struct __stat64_t64 *) st);
}
libc_hidden_def (_IO_file_stat)
@@ -487,7 +487,7 @@ _IO_old_file_seekoff (FILE *fp, off64_t offset, int dir, int mode)
break;
case _IO_seek_end:
{
- struct stat64 st;
+ struct __stat64_t64 st;
if (_IO_SYSSTAT (fp, &st) == 0 && S_ISREG (st.st_mode))
{
offset += st.st_size;
@@ -840,7 +840,7 @@ _IO_wfile_seekoff (FILE *fp, off64_t offset, int dir, int mode)
break;
case _IO_seek_end:
{
- struct stat64 st;
+ struct __stat64_t64 st;
if (_IO_SYSSTAT (fp, &st) == 0 && S_ISREG (st.st_mode))
{
offset += st.st_size;
@@ -78,7 +78,7 @@ static struct archmapped *archmapped;
ARCHMAPPED points to this; if mapping the archive header failed,
then headmap.ptr is null. */
static struct archmapped headmap;
-static struct stat64 archive_stat; /* stat of archive when header mapped. */
+static struct __stat64_t64 archive_stat; /* stat of archive when header mapped. */
/* Record of locales that we have already loaded from the archive. */
struct locale_in_archive
@@ -207,7 +207,7 @@ _nl_load_locale_from_archive (int category, const char **namep)
/* Cannot open the archive, for whatever reason. */
return NULL;
- if (__fstat64 (fd, &archive_stat) == -1)
+ if (__fstat64_time64 (fd, &archive_stat) == -1)
{
/* stat failed, very strange. */
close_and_out:
@@ -396,7 +396,7 @@ _nl_load_locale_from_archive (int category, const char **namep)
/* Open the file if it hasn't happened yet. */
if (fd == -1)
{
- struct stat64 st;
+ struct __stat64_t64 st;
fd = __open_nocancel (archfname,
O_RDONLY|O_LARGEFILE|O_CLOEXEC);
if (fd == -1)
@@ -405,7 +405,7 @@ _nl_load_locale_from_archive (int category, const char **namep)
/* Now verify we think this is really the same archive file
we opened before. If it has been changed we cannot trust
the header we read previously. */
- if (__fstat64 (fd, &st) < 0
+ if (__fstat64_time64 (fd, &st) < 0
|| st.st_size != archive_stat.st_size
|| st.st_mtime != archive_stat.st_mtime
|| st.st_dev != archive_stat.st_dev
@@ -167,7 +167,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
{
int fd;
void *filedata;
- struct stat64 st;
+ struct __stat64_t64 st;
struct __locale_data *newdata;
int save_err;
int alloc = ld_mapped;
@@ -180,7 +180,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
/* Cannot open the file. */
return;
- if (__builtin_expect (__fstat64 (fd, &st), 0) < 0)
+ if (__glibc_unlikely (__fstat64_time64 (fd, &st) < 0))
{
puntfd:
__close_nocancel_nostatus (fd);
@@ -206,7 +206,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
if (__builtin_expect (fd, 0) < 0)
return;
- if (__builtin_expect (__fstat64 (fd, &st), 0) < 0)
+ if (__glibc_unlikely (__fstat64_time64 (fd, &st) < 0))
goto puntfd;
}
@@ -324,8 +324,8 @@ __nscd_get_mapping (request_type type, const char *key,
if (__glibc_unlikely (n == keylen))
{
- struct stat64 st;
- if (__builtin_expect (__fstat64 (mapfd, &st) != 0, 0)
+ struct __stat64_t64 st;
+ if (__glibc_unlikely (__fstat64_time64 (mapfd, &st) != 0)
|| __builtin_expect (st.st_size < sizeof (struct database_pers_head),
0))
goto out_close;
@@ -394,7 +394,7 @@ nss_database_check_reload_and_get (struct nss_database_state *local,
nss_action_list *result,
enum nss_database database_index)
{
- struct stat64 str;
+ struct __stat64_t64 str;
/* Acquire MO is needed because the thread that sets reload_disabled
may have loaded the configuration first, so synchronize with the
@@ -424,7 +424,7 @@ nss_database_check_reload_and_get (struct nss_database_state *local,
errors here are very unlikely, but the chance that we're entering
a container is also very unlikely, so we err on the side of both
very unlikely things not happening at the same time. */
- if (__stat64 ("/", &str) != 0
+ if (__stat64_time64 ("/", &str) != 0
|| (local->root_ino != 0
&& (str.st_ino != local->root_ino
|| str.st_dev != local->root_dev)))
@@ -32,9 +32,9 @@ struct r_file_id
static inline bool
_dl_get_file_id (int fd, struct r_file_id *id)
{
- struct stat64 st;
+ struct __stat64_t64 st;
- if (__glibc_unlikely (__fstat64 (fd, &st) < 0))
+ if (__glibc_unlikely (__fstat64_time64 (fd, &st) < 0))
return false;
id->dev = st.st_dev;
@@ -119,7 +119,7 @@ int group_member ();
int
euidaccess (const char *path, int mode)
{
- struct stat64 stats;
+ struct __stat64_t64 stats;
int granted;
#ifdef _LIBC
@@ -140,7 +140,7 @@ euidaccess (const char *path, int mode)
return access (path, mode);
#endif
- if (__stat64 (path, &stats))
+ if (__stat64_time64 (path, &stats))
return -1;
mode &= (X_OK | W_OK | R_OK); /* Clear any bogus bits. */
@@ -1636,16 +1636,17 @@ static int gaiconf_reload_flag_ever_set;
/* Last modification time. */
#ifdef _STATBUF_ST_NSEC
-static struct timespec gaiconf_mtime;
+static struct __timespec64 gaiconf_mtime;
static inline void
-save_gaiconf_mtime (const struct stat64 *st)
+save_gaiconf_mtime (const struct __stat64_t64 *st)
{
- gaiconf_mtime = st->st_mtim;
+ gaiconf_mtime = (struct __timespec64) { .tv_sec = st->st_mtim.tv_sec,
+ .tv_nsec = st->st_mtim.tv_nsec };
}
static inline bool
-check_gaiconf_mtime (const struct stat64 *st)
+check_gaiconf_mtime (const struct __stat64_t64 *st)
{
return (st->st_mtim.tv_sec == gaiconf_mtime.tv_sec
&& st->st_mtim.tv_nsec == gaiconf_mtime.tv_nsec);
@@ -1656,13 +1657,13 @@ check_gaiconf_mtime (const struct stat64 *st)
static time_t gaiconf_mtime;
static inline void
-save_gaiconf_mtime (const struct stat64 *st)
+save_gaiconf_mtime (const struct __stat64_t64 *st)
{
gaiconf_mtime = st->st_mtime;
}
static inline bool
-check_gaiconf_mtime (const struct stat64 *st)
+check_gaiconf_mtime (const struct __stat64_t64 *st)
{
return st->st_mtime == gaiconf_mtime;
}
@@ -1777,8 +1778,8 @@ gaiconf_init (void)
FILE *fp = fopen (GAICONF_FNAME, "rce");
if (fp != NULL)
{
- struct stat64 st;
- if (__fstat64 (fileno (fp), &st) != 0)
+ struct __stat64_t64 st;
+ if (__fstat64_time64 (fileno (fp), &st) != 0)
{
fclose (fp);
goto no_file;
@@ -2130,8 +2131,8 @@ gaiconf_init (void)
static void
gaiconf_reload (void)
{
- struct stat64 st;
- if (__stat64 (GAICONF_FNAME, &st) != 0
+ struct __stat64_t64 st;
+ if (__stat64_time64 (GAICONF_FNAME, &st) != 0
|| !check_gaiconf_mtime (&st))
gaiconf_init ();
}
@@ -183,7 +183,7 @@ __getcwd_generic (char *buf, size_t size)
ino_t rootino, thisino;
char *dir;
register char *dirp;
- struct stat64 st;
+ struct __stat64_t64 st;
size_t allocated = size;
size_t used;
@@ -249,12 +249,12 @@ __getcwd_generic (char *buf, size_t size)
dirp = dir + allocated;
*--dirp = '\0';
- if (__lstat64 (".", &st) < 0)
+ if (__lstat64_time64 (".", &st) < 0)
goto lose;
thisdev = st.st_dev;
thisino = st.st_ino;
- if (__lstat64 ("/", &st) < 0)
+ if (__lstat64_time64 ("/", &st) < 0)
goto lose;
rootdev = st.st_dev;
rootino = st.st_ino;
@@ -276,12 +276,12 @@ __getcwd_generic (char *buf, size_t size)
if (fd < 0)
goto lose;
fd_needs_closing = true;
- parent_status = __fstat64 (fd, &st);
+ parent_status = __fstat64_time64 (fd, &st);
#else
dotlist[dotlen++] = '.';
dotlist[dotlen++] = '.';
dotlist[dotlen] = '\0';
- parent_status = __lstat64 (dotlist, &st);
+ parent_status = __lstat64_time64 (dotlist, &st);
#endif
if (parent_status != 0)
goto lose;
@@ -353,7 +353,8 @@ __getcwd_generic (char *buf, size_t size)
{
int entry_status;
#if HAVE_OPENAT_SUPPORT
- entry_status = __fstatat64 (fd, d->d_name, &st, AT_SYMLINK_NOFOLLOW);
+ entry_status = __fstatat64_time64 (fd, d->d_name, &st,
+ AT_SYMLINK_NOFOLLOW);
#else
/* Compute size needed for this file name, or for the file
name ".." in the same directory, whichever is larger.
@@ -390,7 +391,7 @@ __getcwd_generic (char *buf, size_t size)
}
memcpy (dotlist + dotlen, d->d_name, _D_ALLOC_NAMLEN (d));
- entry_status = __lstat64 (dotlist, &st);
+ entry_status = __lstat64_time64 (dotlist, &st);
#endif
/* We don't fail here if we cannot stat() a directory entry.
This can happen when (network) file systems fail. If this
@@ -129,9 +129,9 @@ __pathconf (const char *path, int name)
#ifdef _POSIX_ASYNC_IO
{
/* AIO is only allowed on regular files and block devices. */
- struct stat64 st;
+ struct __stat64_t64 st;
- if (__stat64 (path, &st) < 0
+ if (__stat64_time64 (path, &st) < 0
|| (! S_ISREG (st.st_mode) && ! S_ISBLK (st.st_mode)))
return -1;
else
@@ -1215,8 +1215,8 @@ __sysconf_check_spec (const char *spec)
"/POSIX_V6_", sizeof ("/POSIX_V6_") - 1),
spec, speclen + 1);
- struct stat64 st;
- long int ret = __stat64 (name, &st) >= 0 ? 1 : -1;
+ struct __stat64_t64 st;
+ long int ret = __stat64_time64 (name, &st) >= 0 ? 1 : -1;
__set_errno (save_errno);
return ret;
@@ -55,14 +55,14 @@
#include <time.h>
#if _LIBC
-# define struct_stat64 struct stat64
+# define struct_stat64 struct __stat64_t64
# define __secure_getenv __libc_secure_getenv
#else
# define struct_stat64 struct stat
# define __gen_tempname gen_tempname
# define __mkdir mkdir
# define __open open
-# define __lstat64(file, buf) lstat (file, buf)
+# define __lstat64_time64(file, buf) lstat (file, buf)
# define __stat64(file, buf) stat (file, buf)
# define __getrandom getrandom
# define __clock_gettime64 clock_gettime
@@ -99,7 +99,7 @@ static int
direxists (const char *dir)
{
struct_stat64 buf;
- return __stat64 (dir, &buf) == 0 && S_ISDIR (buf.st_mode);
+ return __stat64_time64 (dir, &buf) == 0 && S_ISDIR (buf.st_mode);
}
/* Path search algorithm, for tmpnam, tmpfile, etc. If DIR is
@@ -191,7 +191,7 @@ try_nocreate (char *tmpl, void *flags _GL_UNUSED)
{
struct_stat64 st;
- if (__lstat64 (tmpl, &st) == 0 || errno == EOVERFLOW)
+ if (__lstat64_time64 (tmpl, &st) == 0 || errno == EOVERFLOW)
__set_errno (EEXIST);
return errno == ENOENT ? 0 : -1;
}
@@ -27,9 +27,9 @@
DIR *
__fdopendir (int fd)
{
- struct stat64 statbuf;
+ struct __stat64_t64 statbuf;
- if (__builtin_expect (__fstat64 (fd, &statbuf), 0) < 0)
+ if (__glibc_unlikely (__fstat64_time64 (fd, &statbuf) < 0))
return NULL;
if (__glibc_unlikely (! S_ISDIR (statbuf.st_mode)))
{
@@ -58,8 +58,8 @@ fexecve (int fd, char *const argv[], char *const envp[])
/* We come here only if the 'execve' call fails. Determine whether
/proc is mounted. If not we return ENOSYS. */
- struct stat64 st;
- if (__stat64 ("/proc/self/fd", &st) != 0 && errno == ENOENT)
+ struct __stat64_t64 st;
+ if (__stat64_time64 ("/proc/self/fd", &st) != 0 && errno == ENOENT)
save = ENOSYS;
__set_errno (save);
@@ -49,8 +49,8 @@ opendir_tail (int fd)
/* Now make sure this really is a directory and nothing changed since the
`stat' call. The S_ISDIR check is superfluous if O_DIRECTORY works,
but it's cheap and we need the stat call for st_blksize anyway. */
- struct stat64 statbuf;
- if (__glibc_unlikely (__fstat64 (fd, &statbuf) < 0))
+ struct __stat64_t64 statbuf;
+ if (__glibc_unlikely (__fstat64_time64 (fd, &statbuf) < 0))
goto lose;
if (__glibc_unlikely (! S_ISDIR (statbuf.st_mode)))
{
@@ -88,7 +88,8 @@ __opendir (const char *name)
weak_alias (__opendir, opendir)
DIR *
-__alloc_dir (int fd, bool close_fd, int flags, const struct stat64 *statp)
+__alloc_dir (int fd, bool close_fd, int flags,
+ const struct __stat64_t64 *statp)
{
/* We have to set the close-on-exit flag if the user provided the
file descriptor. */
@@ -65,9 +65,10 @@ distinguish_extX (const struct statfs *fsbuf, const char *file, int fd)
{
char buf[64];
char path[PATH_MAX];
- struct stat64 st;
+ struct __stat64_t64 st;
- if ((file == NULL ? __fstat64 (fd, &st) : __stat64 (file, &st)) != 0)
+ if ((file == NULL ? __fstat64_time64 (fd, &st)
+ : __stat64_time64 (file, &st)) != 0)
/* Strange. The statfd call worked, but stat fails. Default to
the more pessimistic value. */
return EXT2_LINK_MAX;
@@ -25,24 +25,18 @@
linux/Documentation/devices.txt (on linux < 4.10) or
linux/Documentation/admin-guide/devices.txt (on linux >= 4.10). */
static inline bool
-is_pty (struct stat64 *sb)
+is_pty (struct __stat64_t64 *sb)
{
-#ifdef _STATBUF_ST_RDEV
int m = __gnu_dev_major (sb->st_rdev);
return (136 <= m && m <= 143);
-#else
- return false;
-#endif
}
static inline bool
-is_mytty (const struct stat64 *mytty, const struct stat64 *maybe)
+is_mytty (const struct __stat64_t64 *mytty, const struct __stat64_t64 *maybe)
{
return (maybe->st_ino == mytty->st_ino
&& maybe->st_dev == mytty->st_dev
-#ifdef _STATBUF_ST_RDEV
&& S_ISCHR (maybe->st_mode)
&& maybe->st_rdev == mytty->st_rdev
-#endif
);
}
@@ -31,15 +31,15 @@
#include "ttyname.h"
static int getttyname_r (char *buf, size_t buflen,
- const struct stat64 *mytty, int save,
+ const struct __stat64_t64 *mytty, int save,
int *dostat);
static int
attribute_compat_text_section
-getttyname_r (char *buf, size_t buflen, const struct stat64 *mytty,
+getttyname_r (char *buf, size_t buflen, const struct __stat64_t64 *mytty,
int save, int *dostat)
{
- struct stat64 st;
+ struct __stat64_t64 st;
DIR *dirstream;
struct dirent64 *d;
size_t devlen = strlen (buf);
@@ -71,7 +71,7 @@ getttyname_r (char *buf, size_t buflen, const struct stat64 *mytty,
cp = __stpncpy (buf + devlen, d->d_name, needed);
cp[0] = '\0';
- if (__stat64 (buf, &st) == 0
+ if (__stat64_time64 (buf, &st) == 0
&& is_mytty (mytty, &st))
{
(void) __closedir (dirstream);
@@ -93,7 +93,7 @@ int
__ttyname_r (int fd, char *buf, size_t buflen)
{
struct fd_to_filename filename;
- struct stat64 st, st1;
+ struct __stat64_t64 st, st1;
int dostat = 0;
int doispty = 0;
int save = errno;
@@ -118,7 +118,7 @@ __ttyname_r (int fd, char *buf, size_t buflen)
if (__glibc_unlikely (__tcgetattr (fd, &term) < 0))
return errno;
- if (__fstat64 (fd, &st) < 0)
+ if (__fstat64_time64 (fd, &st) < 0)
return errno;
/* We try using the /proc filesystem. */
@@ -144,7 +144,7 @@ __ttyname_r (int fd, char *buf, size_t buflen)
/* Verify readlink result, fall back on iterating through devices. */
if (buf[0] == '/'
- && __stat64 (buf, &st1) == 0
+ && __stat64_time64 (buf, &st1) == 0
&& is_mytty (&st, &st1))
return 0;
@@ -155,7 +155,7 @@ __ttyname_r (int fd, char *buf, size_t buflen)
memcpy (buf, "/dev/pts/", sizeof ("/dev/pts/"));
buflen -= sizeof ("/dev/pts/") - 1;
- if (__stat64 (buf, &st1) == 0 && S_ISDIR (st1.st_mode))
+ if (__stat64_time64 (buf, &st1) == 0 && S_ISDIR (st1.st_mode))
{
ret = getttyname_r (buf, buflen, &st, save,
&dostat);
@@ -22,10 +22,10 @@
key_t
ftok (const char *pathname, int proj_id)
{
- struct stat64 st;
+ struct __stat64_t64 st;
key_t key;
- if (__stat64 (pathname, &st) < 0)
+ if (__stat64_time64 (pathname, &st) < 0)
return (key_t) -1;
key = ((st.st_ino & 0xffff) | ((st.st_dev & 0xff) << 16)
@@ -150,9 +150,9 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
}
/* If we were already using tzfile, check whether the file changed. */
- struct stat64 st;
+ struct __stat64_t64 st;
if (was_using_tzfile
- && __stat64 (file, &st) == 0
+ && __stat64_time64 (file, &st) == 0
&& tzfile_ino == st.st_ino && tzfile_dev == st.st_dev
&& tzfile_mtime == st.st_mtime)
goto done; /* Nothing to do. */
@@ -164,7 +164,7 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
goto ret_free_transitions;
/* Get information about the file we are actually using. */
- if (__fstat64 (__fileno (f), &st) != 0)
+ if (__fstat64_time64 (__fileno (f), &st) != 0)
goto lose;
free ((void *) transitions);