From patchwork Fri Mar 5 20:15:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 42329 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 69A1939A5C20; Fri, 5 Mar 2021 20:16:25 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 69A1939A5C20 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1614975385; bh=Qtjly8zgYmc2moB818UsvNqSPj4uyuWNfZem5GlBrzA=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=RLeUOf2yztCfxR6i5toPvHimmQ0bVzp88UodElwnoY6Gl+DjIWRVz2a6rumY+Qfaj YW5XbpdB9b1r7gpa7PJEQBN35SUYoZz/Fa+DwuEB23lWFdIk+HOlFp4bg53FwKQLkq mc7WvdyMFpXoYfVi/rjV6W794Np81il6ihdo1RgQ= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-qv1-xf2c.google.com (mail-qv1-xf2c.google.com [IPv6:2607:f8b0:4864:20::f2c]) by sourceware.org (Postfix) with ESMTPS id 197D7399C033 for ; Fri, 5 Mar 2021 20:16:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 197D7399C033 Received: by mail-qv1-xf2c.google.com with SMTP id d9so1636872qvo.3 for ; Fri, 05 Mar 2021 12:16:19 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Qtjly8zgYmc2moB818UsvNqSPj4uyuWNfZem5GlBrzA=; b=ddaYQbUCT1q+AGltiMpMO7jUE6pFFefPzVqCsn0WM+h5Dv4r93L+dh+e4rgyO7Jjek 2wiI3bKTtOn3UZtOa5w16+Ch94kjX5ZIyG/jJxHTh1AjFKae87GOrGpaFKS4MauWApWj TkL07UmBrHBkERnSf+MDlCeMgakUMhhCSqV2/EEfipuR0qWLrwvQsG1ObpkcX2ihEi/e yOqs9cjo0icmOCX+PyASwCQnUikGAB5oIG2tFv4wpsmrUpLGA/TIku77f5D+Otsvc7hR q6EKybpNUbMZFCF5X0gTNRGTOQaXN2U7WQWHtSzlNuna47/bUZEUBh0To00CHuJqv8nl w4LA== X-Gm-Message-State: AOAM532fVns/159C18ibMrAu8HIm/y40WMXP4MIN68dcT15q62We1jL+ N7eEDUDQ19zEX671hkwXStTs0gRMrXkUPw== X-Google-Smtp-Source: ABdhPJwf0eoAjCtXJAo1wp8JqwIMVJ9dNBUNVso1ANmGUESfZzoiG+Lqnc4jMVsemWDLRYn4mX979Q== X-Received: by 2002:a0c:c1cc:: with SMTP id v12mr10208650qvh.47.1614975377561; Fri, 05 Mar 2021 12:16:17 -0800 (PST) Received: from localhost.localdomain ([177.194.48.209]) by smtp.googlemail.com with ESMTPSA id c5sm2526145qkl.21.2021.03.05.12.16.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Mar 2021 12:16:17 -0800 (PST) To: libc-alpha@sourceware.org Subject: [PATCH 45/52] Use 64 bit time_t stat internally Date: Fri, 5 Mar 2021 17:15:11 -0300 Message-Id: <20210305201518.798584-46-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210305201518.798584-1-adhemerval.zanella@linaro.org> References: <20210305201518.798584-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Adhemerval Zanella via Libc-alpha From: Adhemerval Zanella Netto Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" 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 +++--- include/sys/stat.h | 2 +- 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.c | 17 +++++++++-------- sysdeps/unix/sysv/linux/ttyname.h | 10 ++-------- sysdeps/unix/sysv/linux/ttyname_r.c | 16 ++++++++-------- sysvipc/ftok.c | 4 ++-- time/tzfile.c | 6 +++--- 37 files changed, 122 insertions(+), 121 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 9e2089cfaa..3de2d8722c 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -1925,11 +1925,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; @@ -1947,9 +1947,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 082f75f459..6d82eb8df3 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/include/sys/stat.h b/include/sys/stat.h index b4c9344628..13e777b3c7 100644 --- a/include/sys/stat.h +++ b/include/sys/stat.h @@ -46,7 +46,7 @@ hidden_proto (__lstat64) hidden_proto (__fstatat64) # endif -# if __TIMESIZE == 64 +# if __TIMESIZE == 64 || defined NO_RTLD_HIDDEN # define __stat64_time64 __stat64 # define __fstat64_time64 __fstat64 # define __lstat64_time64 __lstat64 diff --git a/inet/rcmd.c b/inet/rcmd.c index 452ff7d099..8aef75e280 100644 --- a/inet/rcmd.c +++ b/inet/rcmd.c @@ -467,14 +467,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"); @@ -483,7 +483,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 a39f0ecfc1..18650c21a8 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-utimensat tests-time64 := tst-fts-time64 \ @@ -78,7 +78,7 @@ tests-time64 := tst-fts-time64 \ tst-utimensat-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 fb72d0cc03..788177871d 100644 --- a/nss/nss_database.c +++ b/nss/nss_database.c @@ -363,7 +363,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 @@ -393,7 +393,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 92d2a1c284..44ed985730 100644 --- a/sysdeps/posix/getaddrinfo.c +++ b/sysdeps/posix/getaddrinfo.c @@ -1638,16 +1638,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); @@ -1658,13 +1659,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; } @@ -1779,8 +1780,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; @@ -2132,8 +2133,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 #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 f37c245396..7e7a47c91a 100644 --- a/sysdeps/unix/sysv/linux/fexecve.c +++ b/sysdeps/unix/sysv/linux/fexecve.c @@ -60,8 +60,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.c b/sysdeps/unix/sysv/linux/ttyname.c index d561ac12f2..b026c589ca 100644 --- a/sysdeps/unix/sysv/linux/ttyname.c +++ b/sysdeps/unix/sysv/linux/ttyname.c @@ -35,17 +35,18 @@ char *__ttyname; #endif -static char *getttyname (const char *dev, const struct stat64 *mytty, +static char *getttyname (const char *dev, const struct __stat64_t64 *mytty, int save, int *dostat); libc_freeres_ptr (static char *getttyname_name); static char * attribute_compat_text_section -getttyname (const char *dev, const struct stat64 *mytty, int save, int *dostat) +getttyname (const char *dev, const struct __stat64_t64 *mytty, int save, + int *dostat) { static size_t namelen; - struct stat64 st; + struct __stat64_t64 st; DIR *dirstream; struct dirent64 *d; size_t devlen = strlen (dev) + 1; @@ -84,7 +85,7 @@ getttyname (const char *dev, const struct stat64 *mytty, int save, int *dostat) *((char *) __mempcpy (getttyname_name, dev, devlen - 1)) = '/'; } memcpy (&getttyname_name[devlen], d->d_name, dlen); - if (__stat64 (getttyname_name, &st) == 0 + if (__stat64_time64 (getttyname_name, &st) == 0 && is_mytty (mytty, &st)) { (void) __closedir (dirstream); @@ -113,7 +114,7 @@ ttyname (int fd) { static size_t buflen; char procname[30]; - struct stat64 st, st1; + struct __stat64_t64 st, st1; int dostat = 0; int doispty = 0; char *name; @@ -125,7 +126,7 @@ ttyname (int fd) if (__glibc_unlikely (__tcgetattr (fd, &term) < 0)) return NULL; - if (__fstat64 (fd, &st) < 0) + if (__fstat64_time64 (fd, &st) < 0) return NULL; /* We try using the /proc filesystem. */ @@ -162,14 +163,14 @@ ttyname (int fd) /* Verify readlink result, fall back on iterating through devices. */ if (ttyname_buf[0] == '/' - && __stat64 (ttyname_buf, &st1) == 0 + && __stat64_time64 (ttyname_buf, &st1) == 0 && is_mytty (&st, &st1)) return ttyname_buf; doispty = 1; } - if (__stat64 ("/dev/pts", &st1) == 0 && S_ISDIR (st1.st_mode)) + if (__stat64_time64 ("/dev/pts", &st1) == 0 && S_ISDIR (st1.st_mode)) { name = getttyname ("/dev/pts", &st, save, &dostat); } 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 c1092d1695..0ee809458d 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) { char procname[30]; - 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. */ @@ -146,7 +146,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; @@ -157,7 +157,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);