Use 64 bit time_t stat internally

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.

Reviewed-by: Lukasz Majewski <lukma@denx.de>
This commit is contained in:
Adhemerval Zanella 2021-03-02 17:06:02 -03:00
parent a318262bc0
commit 52a5fe70a2
35 changed files with 106 additions and 109 deletions

View file

@ -69,10 +69,10 @@ check_one_fd (int fd, int mode)
Note that the following code assumes that STDIN_FILENO, Note that the following code assumes that STDIN_FILENO,
STDOUT_FILENO, STDERR_FILENO are the three lowest file STDOUT_FILENO, STDERR_FILENO are the three lowest file
decsriptor numbers, in this order. */ decsriptor numbers, in this order. */
struct stat64 st; struct __stat64_t64 st;
if (__builtin_expect (nullfd != fd, 0) if (__glibc_unlikely (nullfd != fd)
|| __builtin_expect (__fstat64 (fd, &st), 0) != 0 || __glibc_likely (__fstat64_time64 (fd, &st) != 0)
|| __builtin_expect (S_ISCHR (st.st_mode), 1) == 0 || __glibc_unlikely (S_ISCHR (st.st_mode) == 0)
|| st.st_rdev != dev) || st.st_rdev != dev)
/* We cannot even give an error message here since it would /* We cannot even give an error message here since it would
run into the same problems. */ run into the same problems. */

View file

@ -1946,11 +1946,11 @@ open_path (const char *name, size_t namelen, int mode,
{ {
/* We failed to open machine dependent library. Let's /* We failed to open machine dependent library. Let's
test whether there is any directory at all. */ test whether there is any directory at all. */
struct stat64 st; struct __stat64_t64 st;
buf[buflen - namelen - 1] = '\0'; buf[buflen - namelen - 1] = '\0';
if (__stat64 (buf, &st) != 0 if (__stat64_time64 (buf, &st) != 0
|| ! S_ISDIR (st.st_mode)) || ! S_ISDIR (st.st_mode))
/* The directory does not exist or it is no directory. */ /* The directory does not exist or it is no directory. */
this_dir->status[cnt] = nonexisting; 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 /* This is an extra security effort to make sure nobody can
preload broken shared objects which are in the trusted preload broken shared objects which are in the trusted
directories and so exploit the bugs. */ 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) || (st.st_mode & S_ISUID) == 0)
{ {
/* The shared object cannot be tested for being SUID /* The shared object cannot be tested for being SUID

View file

@ -43,11 +43,11 @@ void *
_dl_sysdep_read_whole_file (const char *file, size_t *sizep, int prot) _dl_sysdep_read_whole_file (const char *file, size_t *sizep, int prot)
{ {
void *result = MAP_FAILED; void *result = MAP_FAILED;
struct stat64 st; struct __stat64_t64 st;
int fd = __open64_nocancel (file, O_RDONLY | O_CLOEXEC); int fd = __open64_nocancel (file, O_RDONLY | O_CLOEXEC);
if (fd >= 0) if (fd >= 0)
{ {
if (__fstat64 (fd, &st) >= 0) if (__fstat64_time64 (fd, &st) >= 0)
{ {
*sizep = st.st_size; *sizep = st.st_size;

View file

@ -185,7 +185,7 @@ _dl_start_profile (void)
{ {
char *filename; char *filename;
int fd; int fd;
struct stat64 st; struct __stat64_t64 st;
const ElfW(Phdr) *ph; const ElfW(Phdr) *ph;
ElfW(Addr) mapstart = ~((ElfW(Addr)) 0); ElfW(Addr) mapstart = ~((ElfW(Addr)) 0);
ElfW(Addr) mapend = 0; ElfW(Addr) mapend = 0;
@ -342,7 +342,7 @@ _dl_start_profile (void)
return; 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. */ /* Not stat'able or not a regular file => don't use it. */
errstr = "%s: cannot stat file: %s\n"; errstr = "%s: cannot stat file: %s\n";

View file

@ -48,7 +48,7 @@ int
__gconv_load_cache (void) __gconv_load_cache (void)
{ {
int fd; int fd;
struct stat64 st; struct __stat64_t64 st;
struct gconvcache_header *header; struct gconvcache_header *header;
/* We cannot use the cache if the GCONV_PATH environment variable is /* We cannot use the cache if the GCONV_PATH environment variable is
@ -64,7 +64,7 @@ __gconv_load_cache (void)
return -1; return -1;
/* Get information about the file. */ /* 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 /* We do not have to start looking at the file if it cannot contain
at least the cache header. */ at least the cache header. */
|| (size_t) st.st_size < sizeof (struct gconvcache_header)) || (size_t) st.st_size < sizeof (struct gconvcache_header))

View file

@ -49,7 +49,7 @@ extern int __versionsort64 (const struct dirent64 **a,
const struct dirent64 **b) const struct dirent64 **b)
__attribute_pure__; __attribute_pure__;
extern DIR *__alloc_dir (int fd, bool close_fd, int flags, extern DIR *__alloc_dir (int fd, bool close_fd, int flags,
const struct stat64 *statp) const struct __stat64_t64 *statp)
__nonnull (4) attribute_hidden; __nonnull (4) attribute_hidden;
extern __typeof (rewinddir) __rewinddir; extern __typeof (rewinddir) __rewinddir;
extern __typeof (seekdir) __seekdir; extern __typeof (seekdir) __seekdir;

View file

@ -33,8 +33,8 @@ struct file_change_detection
off64_t size; off64_t size;
ino64_t ino; ino64_t ino;
struct timespec mtime; struct __timespec64 mtime;
struct timespec ctime; struct __timespec64 ctime;
}; };
/* Returns true if *LEFT and *RIGHT describe the same version of the /* 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 /* Extract file change information to *FILE from the stat buffer
*ST. */ *ST. */
void __file_change_detection_for_stat (struct file_change_detection *file, 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 /* Writes file change information for PATH to *FILE. Returns true on
success. For benign errors, *FILE is cleared, and true is success. For benign errors, *FILE is cleared, and true is

View file

@ -468,14 +468,14 @@ ruserok (const char *rhost, int superuser, const char *ruser,
static FILE * static FILE *
iruserfopen (const char *file, uid_t okuser) iruserfopen (const char *file, uid_t okuser)
{ {
struct stat64 st; struct __stat64_t64 st;
char *cp = NULL; char *cp = NULL;
FILE *res = NULL; FILE *res = NULL;
/* If not a regular file, if owned by someone other than user or /* If not a regular file, if owned by someone other than user or
root, if writeable by anyone but the owner, or if hardlinked root, if writeable by anyone but the owner, or if hardlinked
anywhere, quit. */ anywhere, quit. */
if (__lstat64 (file, &st)) if (__lstat64_time64 (file, &st))
cp = _("lstat failed"); cp = _("lstat failed");
else if (!S_ISREG (st.st_mode)) else if (!S_ISREG (st.st_mode))
cp = _("not regular file"); cp = _("not regular file");
@ -484,7 +484,7 @@ iruserfopen (const char *file, uid_t okuser)
res = fopen (file, "rce"); res = fopen (file, "rce");
if (!res) if (!res)
cp = _("cannot open"); cp = _("cannot open");
else if (__fstat64 (fileno (res), &st) < 0) else if (__fstat64_time64 (fileno (res), &st) < 0)
cp = _("fstat failed"); cp = _("fstat failed");
else if (st.st_uid && st.st_uid != okuser) else if (st.st_uid && st.st_uid != okuser)
cp = _("bad owner"); cp = _("bad owner");

View file

@ -756,7 +756,7 @@ _nl_load_domain (struct loaded_l10nfile *domain_file,
int fd = -1; int fd = -1;
size_t size; size_t size;
#ifdef _LIBC #ifdef _LIBC
struct stat64 st; struct __stat64_t64 st;
#else #else
struct stat st; struct stat st;
#endif #endif
@ -804,7 +804,7 @@ _nl_load_domain (struct loaded_l10nfile *domain_file,
/* We must know about the size of the file. */ /* We must know about the size of the file. */
if ( if (
#ifdef _LIBC #ifdef _LIBC
__builtin_expect (__fstat64 (fd, &st) != 0, 0) __glibc_unlikely (__fstat64_time64 (fd, &st) != 0)
#else #else
__builtin_expect (fstat (fd, &st) != 0, 0) __builtin_expect (fstat (fd, &st) != 0, 0)
#endif #endif

View file

@ -69,7 +69,7 @@ tests := test-utime test-stat test-stat2 test-lfs tst-getcwd \
tst-posix_fallocate tst-posix_fallocate64 \ tst-posix_fallocate tst-posix_fallocate64 \
tst-fts tst-fts-lfs tst-open-tmpfile \ tst-fts tst-fts-lfs tst-open-tmpfile \
tst-copy_file_range tst-getcwd-abspath tst-lockf \ 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-ftw-bz26353 tst-stat tst-stat-lfs \
tst-utime \ tst-utime \
tst-utimes \ tst-utimes \
@ -90,7 +90,7 @@ tests-time64 := \
tst-utimes-time64 \ tst-utimes-time64 \
# Likewise for statx, but we do not need static linking here. # 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 tests-static += tst-statx
ifeq ($(run-built-tests),yes) ifeq ($(run-built-tests),yes)

View file

@ -44,7 +44,7 @@ libc_hidden_def (__file_is_unchanged)
void void
__file_change_detection_for_stat (struct file_change_detection *file, __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)) if (S_ISDIR (st->st_mode))
/* Treat as empty file. */ /* Treat as empty file. */
@ -66,8 +66,8 @@ bool
__file_change_detection_for_path (struct file_change_detection *file, __file_change_detection_for_path (struct file_change_detection *file,
const char *path) const char *path)
{ {
struct stat64 st; struct __stat64_t64 st;
if (__stat64 (path, &st) != 0) if (__stat64_time64 (path, &st) != 0)
switch (errno) switch (errno)
{ {
case EACCES: case EACCES:
@ -104,8 +104,8 @@ __file_change_detection_for_fp (struct file_change_detection *file,
} }
else else
{ {
struct stat64 st; struct __stat64_t64 st;
if (__fstat64 (__fileno (fp), &st) != 0) if (__fstat64_time64 (__fileno (fp), &st) != 0)
/* If we already have a file descriptor, all errors are fatal. */ /* If we already have a file descriptor, all errors are fatal. */
return false; return false;
else else

View file

@ -28,12 +28,12 @@ char *
get_current_dir_name (void) get_current_dir_name (void)
{ {
char *pwd; char *pwd;
struct stat64 dotstat, pwdstat; struct __stat64_t64 dotstat, pwdstat;
pwd = getenv ("PWD"); pwd = getenv ("PWD");
if (pwd != NULL if (pwd != NULL
&& __stat64 (".", &dotstat) == 0 && __stat64_time64 (".", &dotstat) == 0
&& __stat64 (pwd, &pwdstat) == 0 && __stat64_time64 (pwd, &pwdstat) == 0
&& pwdstat.st_dev == dotstat.st_dev && pwdstat.st_dev == dotstat.st_dev
&& pwdstat.st_ino == dotstat.st_ino) && pwdstat.st_ino == dotstat.st_ino)
/* The PWD value is correct. Use it. */ /* The PWD value is correct. Use it. */

View file

@ -78,7 +78,7 @@ _IO_file_doallocate (FILE *fp)
{ {
size_t size; size_t size;
char *p; char *p;
struct stat64 st; struct __stat64_t64 st;
size = BUFSIZ; size = BUFSIZ;
if (fp->_fileno >= 0 && __builtin_expect (_IO_SYSSTAT (fp, &st), 0) >= 0) if (fp->_fileno >= 0 && __builtin_expect (_IO_SYSSTAT (fp, &st), 0) >= 0)

View file

@ -545,7 +545,7 @@ libc_hidden_ver (_IO_new_file_underflow, _IO_file_underflow)
static int static int
mmap_remap_check (FILE *fp) mmap_remap_check (FILE *fp)
{ {
struct stat64 st; struct __stat64_t64 st;
if (_IO_SYSSTAT (fp, &st) == 0 if (_IO_SYSSTAT (fp, &st) == 0
&& S_ISREG (st.st_mode) && st.st_size != 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 file descriptors are for mmap-able objects and on 32-bit
machines we don't want to map files which are too large since machines we don't want to map files which are too large since
this would require too much virtual memory. */ this would require too much virtual memory. */
struct stat64 st; struct __stat64_t64 st;
if (_IO_SYSSTAT (fp, &st) == 0 if (_IO_SYSSTAT (fp, &st) == 0
&& S_ISREG (st.st_mode) && st.st_size != 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; break;
case _IO_seek_end: case _IO_seek_end:
{ {
struct stat64 st; struct __stat64_t64 st;
if (_IO_SYSSTAT (fp, &st) == 0 && S_ISREG (st.st_mode)) if (_IO_SYSSTAT (fp, &st) == 0 && S_ISREG (st.st_mode))
{ {
offset += st.st_size; offset += st.st_size;
@ -1145,7 +1145,7 @@ libc_hidden_def (_IO_file_seek)
int int
_IO_file_stat (FILE *fp, void *st) _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) libc_hidden_def (_IO_file_stat)

View file

@ -487,7 +487,7 @@ _IO_old_file_seekoff (FILE *fp, off64_t offset, int dir, int mode)
break; break;
case _IO_seek_end: case _IO_seek_end:
{ {
struct stat64 st; struct __stat64_t64 st;
if (_IO_SYSSTAT (fp, &st) == 0 && S_ISREG (st.st_mode)) if (_IO_SYSSTAT (fp, &st) == 0 && S_ISREG (st.st_mode))
{ {
offset += st.st_size; offset += st.st_size;

View file

@ -840,7 +840,7 @@ _IO_wfile_seekoff (FILE *fp, off64_t offset, int dir, int mode)
break; break;
case _IO_seek_end: case _IO_seek_end:
{ {
struct stat64 st; struct __stat64_t64 st;
if (_IO_SYSSTAT (fp, &st) == 0 && S_ISREG (st.st_mode)) if (_IO_SYSSTAT (fp, &st) == 0 && S_ISREG (st.st_mode))
{ {
offset += st.st_size; offset += st.st_size;

View file

@ -78,7 +78,7 @@ static struct archmapped *archmapped;
ARCHMAPPED points to this; if mapping the archive header failed, ARCHMAPPED points to this; if mapping the archive header failed,
then headmap.ptr is null. */ then headmap.ptr is null. */
static struct archmapped headmap; 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. */ /* Record of locales that we have already loaded from the archive. */
struct locale_in_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. */ /* Cannot open the archive, for whatever reason. */
return NULL; return NULL;
if (__fstat64 (fd, &archive_stat) == -1) if (__fstat64_time64 (fd, &archive_stat) == -1)
{ {
/* stat failed, very strange. */ /* stat failed, very strange. */
close_and_out: 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. */ /* Open the file if it hasn't happened yet. */
if (fd == -1) if (fd == -1)
{ {
struct stat64 st; struct __stat64_t64 st;
fd = __open_nocancel (archfname, fd = __open_nocancel (archfname,
O_RDONLY|O_LARGEFILE|O_CLOEXEC); O_RDONLY|O_LARGEFILE|O_CLOEXEC);
if (fd == -1) 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 /* Now verify we think this is really the same archive file
we opened before. If it has been changed we cannot trust we opened before. If it has been changed we cannot trust
the header we read previously. */ 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_size != archive_stat.st_size
|| st.st_mtime != archive_stat.st_mtime || st.st_mtime != archive_stat.st_mtime
|| st.st_dev != archive_stat.st_dev || st.st_dev != archive_stat.st_dev

View file

@ -167,7 +167,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
{ {
int fd; int fd;
void *filedata; void *filedata;
struct stat64 st; struct __stat64_t64 st;
struct __locale_data *newdata; struct __locale_data *newdata;
int save_err; int save_err;
int alloc = ld_mapped; int alloc = ld_mapped;
@ -180,7 +180,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
/* Cannot open the file. */ /* Cannot open the file. */
return; return;
if (__builtin_expect (__fstat64 (fd, &st), 0) < 0) if (__glibc_unlikely (__fstat64_time64 (fd, &st) < 0))
{ {
puntfd: puntfd:
__close_nocancel_nostatus (fd); __close_nocancel_nostatus (fd);
@ -206,7 +206,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
if (__builtin_expect (fd, 0) < 0) if (__builtin_expect (fd, 0) < 0)
return; return;
if (__builtin_expect (__fstat64 (fd, &st), 0) < 0) if (__glibc_unlikely (__fstat64_time64 (fd, &st) < 0))
goto puntfd; goto puntfd;
} }

View file

@ -324,8 +324,8 @@ __nscd_get_mapping (request_type type, const char *key,
if (__glibc_unlikely (n == keylen)) if (__glibc_unlikely (n == keylen))
{ {
struct stat64 st; struct __stat64_t64 st;
if (__builtin_expect (__fstat64 (mapfd, &st) != 0, 0) if (__glibc_unlikely (__fstat64_time64 (mapfd, &st) != 0)
|| __builtin_expect (st.st_size < sizeof (struct database_pers_head), || __builtin_expect (st.st_size < sizeof (struct database_pers_head),
0)) 0))
goto out_close; goto out_close;

View file

@ -394,7 +394,7 @@ nss_database_check_reload_and_get (struct nss_database_state *local,
nss_action_list *result, nss_action_list *result,
enum nss_database database_index) enum nss_database database_index)
{ {
struct stat64 str; struct __stat64_t64 str;
/* Acquire MO is needed because the thread that sets reload_disabled /* Acquire MO is needed because the thread that sets reload_disabled
may have loaded the configuration first, so synchronize with the 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 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 a container is also very unlikely, so we err on the side of both
very unlikely things not happening at the same time. */ very unlikely things not happening at the same time. */
if (__stat64 ("/", &str) != 0 if (__stat64_time64 ("/", &str) != 0
|| (local->root_ino != 0 || (local->root_ino != 0
&& (str.st_ino != local->root_ino && (str.st_ino != local->root_ino
|| str.st_dev != local->root_dev))) || str.st_dev != local->root_dev)))

View file

@ -32,9 +32,9 @@ struct r_file_id
static inline bool static inline bool
_dl_get_file_id (int fd, struct r_file_id *id) _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; return false;
id->dev = st.st_dev; id->dev = st.st_dev;

View file

@ -119,7 +119,7 @@ int group_member ();
int int
euidaccess (const char *path, int mode) euidaccess (const char *path, int mode)
{ {
struct stat64 stats; struct __stat64_t64 stats;
int granted; int granted;
#ifdef _LIBC #ifdef _LIBC
@ -140,7 +140,7 @@ euidaccess (const char *path, int mode)
return access (path, mode); return access (path, mode);
#endif #endif
if (__stat64 (path, &stats)) if (__stat64_time64 (path, &stats))
return -1; return -1;
mode &= (X_OK | W_OK | R_OK); /* Clear any bogus bits. */ mode &= (X_OK | W_OK | R_OK); /* Clear any bogus bits. */

View file

@ -1636,16 +1636,16 @@ static int gaiconf_reload_flag_ever_set;
/* Last modification time. */ /* Last modification time. */
#ifdef _STATBUF_ST_NSEC #ifdef _STATBUF_ST_NSEC
static struct timespec gaiconf_mtime; static struct __timespec64 gaiconf_mtime;
static inline void 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 = st->st_mtim;
} }
static inline bool 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 return (st->st_mtim.tv_sec == gaiconf_mtime.tv_sec
&& st->st_mtim.tv_nsec == gaiconf_mtime.tv_nsec); && st->st_mtim.tv_nsec == gaiconf_mtime.tv_nsec);
@ -1656,13 +1656,13 @@ check_gaiconf_mtime (const struct stat64 *st)
static time_t gaiconf_mtime; static time_t gaiconf_mtime;
static inline void static inline void
save_gaiconf_mtime (const struct stat64 *st) save_gaiconf_mtime (const struct __stat64_t64 *st)
{ {
gaiconf_mtime = st->st_mtime; gaiconf_mtime = st->st_mtime;
} }
static inline bool static inline bool
check_gaiconf_mtime (const struct stat64 *st) check_gaiconf_mtime (const struct __stat64_t64 *st)
{ {
return st->st_mtime == gaiconf_mtime; return st->st_mtime == gaiconf_mtime;
} }
@ -1777,8 +1777,8 @@ gaiconf_init (void)
FILE *fp = fopen (GAICONF_FNAME, "rce"); FILE *fp = fopen (GAICONF_FNAME, "rce");
if (fp != NULL) if (fp != NULL)
{ {
struct stat64 st; struct __stat64_t64 st;
if (__fstat64 (fileno (fp), &st) != 0) if (__fstat64_time64 (fileno (fp), &st) != 0)
{ {
fclose (fp); fclose (fp);
goto no_file; goto no_file;
@ -2130,8 +2130,8 @@ gaiconf_init (void)
static void static void
gaiconf_reload (void) gaiconf_reload (void)
{ {
struct stat64 st; struct __stat64_t64 st;
if (__stat64 (GAICONF_FNAME, &st) != 0 if (__stat64_time64 (GAICONF_FNAME, &st) != 0
|| !check_gaiconf_mtime (&st)) || !check_gaiconf_mtime (&st))
gaiconf_init (); gaiconf_init ();
} }

View file

@ -183,7 +183,7 @@ __getcwd_generic (char *buf, size_t size)
ino_t rootino, thisino; ino_t rootino, thisino;
char *dir; char *dir;
register char *dirp; register char *dirp;
struct stat64 st; struct __stat64_t64 st;
size_t allocated = size; size_t allocated = size;
size_t used; size_t used;
@ -249,12 +249,12 @@ __getcwd_generic (char *buf, size_t size)
dirp = dir + allocated; dirp = dir + allocated;
*--dirp = '\0'; *--dirp = '\0';
if (__lstat64 (".", &st) < 0) if (__lstat64_time64 (".", &st) < 0)
goto lose; goto lose;
thisdev = st.st_dev; thisdev = st.st_dev;
thisino = st.st_ino; thisino = st.st_ino;
if (__lstat64 ("/", &st) < 0) if (__lstat64_time64 ("/", &st) < 0)
goto lose; goto lose;
rootdev = st.st_dev; rootdev = st.st_dev;
rootino = st.st_ino; rootino = st.st_ino;
@ -276,12 +276,12 @@ __getcwd_generic (char *buf, size_t size)
if (fd < 0) if (fd < 0)
goto lose; goto lose;
fd_needs_closing = true; fd_needs_closing = true;
parent_status = __fstat64 (fd, &st); parent_status = __fstat64_time64 (fd, &st);
#else #else
dotlist[dotlen++] = '.'; dotlist[dotlen++] = '.';
dotlist[dotlen++] = '.'; dotlist[dotlen++] = '.';
dotlist[dotlen] = '\0'; dotlist[dotlen] = '\0';
parent_status = __lstat64 (dotlist, &st); parent_status = __lstat64_time64 (dotlist, &st);
#endif #endif
if (parent_status != 0) if (parent_status != 0)
goto lose; goto lose;
@ -353,7 +353,8 @@ __getcwd_generic (char *buf, size_t size)
{ {
int entry_status; int entry_status;
#if HAVE_OPENAT_SUPPORT #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 #else
/* Compute size needed for this file name, or for the file /* Compute size needed for this file name, or for the file
name ".." in the same directory, whichever is larger. 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)); memcpy (dotlist + dotlen, d->d_name, _D_ALLOC_NAMLEN (d));
entry_status = __lstat64 (dotlist, &st); entry_status = __lstat64_time64 (dotlist, &st);
#endif #endif
/* We don't fail here if we cannot stat() a directory entry. /* We don't fail here if we cannot stat() a directory entry.
This can happen when (network) file systems fail. If this This can happen when (network) file systems fail. If this

View file

@ -129,9 +129,9 @@ __pathconf (const char *path, int name)
#ifdef _POSIX_ASYNC_IO #ifdef _POSIX_ASYNC_IO
{ {
/* AIO is only allowed on regular files and block devices. */ /* 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))) || (! S_ISREG (st.st_mode) && ! S_ISBLK (st.st_mode)))
return -1; return -1;
else else

View file

@ -1215,8 +1215,8 @@ __sysconf_check_spec (const char *spec)
"/POSIX_V6_", sizeof ("/POSIX_V6_") - 1), "/POSIX_V6_", sizeof ("/POSIX_V6_") - 1),
spec, speclen + 1); spec, speclen + 1);
struct stat64 st; struct __stat64_t64 st;
long int ret = __stat64 (name, &st) >= 0 ? 1 : -1; long int ret = __stat64_time64 (name, &st) >= 0 ? 1 : -1;
__set_errno (save_errno); __set_errno (save_errno);
return ret; return ret;

View file

@ -55,14 +55,14 @@
#include <time.h> #include <time.h>
#if _LIBC #if _LIBC
# define struct_stat64 struct stat64 # define struct_stat64 struct __stat64_t64
# define __secure_getenv __libc_secure_getenv # define __secure_getenv __libc_secure_getenv
#else #else
# define struct_stat64 struct stat # define struct_stat64 struct stat
# define __gen_tempname gen_tempname # define __gen_tempname gen_tempname
# define __mkdir mkdir # define __mkdir mkdir
# define __open open # 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 __stat64(file, buf) stat (file, buf)
# define __getrandom getrandom # define __getrandom getrandom
# define __clock_gettime64 clock_gettime # define __clock_gettime64 clock_gettime
@ -99,7 +99,7 @@ static int
direxists (const char *dir) direxists (const char *dir)
{ {
struct_stat64 buf; 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 /* 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; struct_stat64 st;
if (__lstat64 (tmpl, &st) == 0 || errno == EOVERFLOW) if (__lstat64_time64 (tmpl, &st) == 0 || errno == EOVERFLOW)
__set_errno (EEXIST); __set_errno (EEXIST);
return errno == ENOENT ? 0 : -1; return errno == ENOENT ? 0 : -1;
} }

View file

@ -27,9 +27,9 @@
DIR * DIR *
__fdopendir (int fd) __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; return NULL;
if (__glibc_unlikely (! S_ISDIR (statbuf.st_mode))) if (__glibc_unlikely (! S_ISDIR (statbuf.st_mode)))
{ {

View file

@ -58,8 +58,8 @@ fexecve (int fd, char *const argv[], char *const envp[])
/* We come here only if the 'execve' call fails. Determine whether /* We come here only if the 'execve' call fails. Determine whether
/proc is mounted. If not we return ENOSYS. */ /proc is mounted. If not we return ENOSYS. */
struct stat64 st; struct __stat64_t64 st;
if (__stat64 ("/proc/self/fd", &st) != 0 && errno == ENOENT) if (__stat64_time64 ("/proc/self/fd", &st) != 0 && errno == ENOENT)
save = ENOSYS; save = ENOSYS;
__set_errno (save); __set_errno (save);

View file

@ -49,8 +49,8 @@ opendir_tail (int fd)
/* Now make sure this really is a directory and nothing changed since the /* 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, `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. */ but it's cheap and we need the stat call for st_blksize anyway. */
struct stat64 statbuf; struct __stat64_t64 statbuf;
if (__glibc_unlikely (__fstat64 (fd, &statbuf) < 0)) if (__glibc_unlikely (__fstat64_time64 (fd, &statbuf) < 0))
goto lose; goto lose;
if (__glibc_unlikely (! S_ISDIR (statbuf.st_mode))) if (__glibc_unlikely (! S_ISDIR (statbuf.st_mode)))
{ {
@ -88,7 +88,8 @@ __opendir (const char *name)
weak_alias (__opendir, opendir) weak_alias (__opendir, opendir)
DIR * 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 /* We have to set the close-on-exit flag if the user provided the
file descriptor. */ file descriptor. */

View file

@ -65,9 +65,10 @@ distinguish_extX (const struct statfs *fsbuf, const char *file, int fd)
{ {
char buf[64]; char buf[64];
char path[PATH_MAX]; 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 /* Strange. The statfd call worked, but stat fails. Default to
the more pessimistic value. */ the more pessimistic value. */
return EXT2_LINK_MAX; return EXT2_LINK_MAX;

View file

@ -25,24 +25,18 @@
linux/Documentation/devices.txt (on linux < 4.10) or linux/Documentation/devices.txt (on linux < 4.10) or
linux/Documentation/admin-guide/devices.txt (on linux >= 4.10). */ linux/Documentation/admin-guide/devices.txt (on linux >= 4.10). */
static inline bool 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); int m = __gnu_dev_major (sb->st_rdev);
return (136 <= m && m <= 143); return (136 <= m && m <= 143);
#else
return false;
#endif
} }
static inline bool 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 return (maybe->st_ino == mytty->st_ino
&& maybe->st_dev == mytty->st_dev && maybe->st_dev == mytty->st_dev
#ifdef _STATBUF_ST_RDEV
&& S_ISCHR (maybe->st_mode) && S_ISCHR (maybe->st_mode)
&& maybe->st_rdev == mytty->st_rdev && maybe->st_rdev == mytty->st_rdev
#endif
); );
} }

View file

@ -31,15 +31,15 @@
#include "ttyname.h" #include "ttyname.h"
static int getttyname_r (char *buf, size_t buflen, static int getttyname_r (char *buf, size_t buflen,
const struct stat64 *mytty, int save, const struct __stat64_t64 *mytty, int save,
int *dostat); int *dostat);
static int static int
attribute_compat_text_section 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) int save, int *dostat)
{ {
struct stat64 st; struct __stat64_t64 st;
DIR *dirstream; DIR *dirstream;
struct dirent64 *d; struct dirent64 *d;
size_t devlen = strlen (buf); 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 = __stpncpy (buf + devlen, d->d_name, needed);
cp[0] = '\0'; cp[0] = '\0';
if (__stat64 (buf, &st) == 0 if (__stat64_time64 (buf, &st) == 0
&& is_mytty (mytty, &st)) && is_mytty (mytty, &st))
{ {
(void) __closedir (dirstream); (void) __closedir (dirstream);
@ -93,7 +93,7 @@ int
__ttyname_r (int fd, char *buf, size_t buflen) __ttyname_r (int fd, char *buf, size_t buflen)
{ {
struct fd_to_filename filename; struct fd_to_filename filename;
struct stat64 st, st1; struct __stat64_t64 st, st1;
int dostat = 0; int dostat = 0;
int doispty = 0; int doispty = 0;
int save = errno; int save = errno;
@ -118,7 +118,7 @@ __ttyname_r (int fd, char *buf, size_t buflen)
if (__glibc_unlikely (__tcgetattr (fd, &term) < 0)) if (__glibc_unlikely (__tcgetattr (fd, &term) < 0))
return errno; return errno;
if (__fstat64 (fd, &st) < 0) if (__fstat64_time64 (fd, &st) < 0)
return errno; return errno;
/* We try using the /proc filesystem. */ /* 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. */ /* Verify readlink result, fall back on iterating through devices. */
if (buf[0] == '/' if (buf[0] == '/'
&& __stat64 (buf, &st1) == 0 && __stat64_time64 (buf, &st1) == 0
&& is_mytty (&st, &st1)) && is_mytty (&st, &st1))
return 0; return 0;
@ -155,7 +155,7 @@ __ttyname_r (int fd, char *buf, size_t buflen)
memcpy (buf, "/dev/pts/", sizeof ("/dev/pts/")); memcpy (buf, "/dev/pts/", sizeof ("/dev/pts/"));
buflen -= sizeof ("/dev/pts/") - 1; 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, ret = getttyname_r (buf, buflen, &st, save,
&dostat); &dostat);

View file

@ -22,10 +22,10 @@
key_t key_t
ftok (const char *pathname, int proj_id) ftok (const char *pathname, int proj_id)
{ {
struct stat64 st; struct __stat64_t64 st;
key_t key; key_t key;
if (__stat64 (pathname, &st) < 0) if (__stat64_time64 (pathname, &st) < 0)
return (key_t) -1; return (key_t) -1;
key = ((st.st_ino & 0xffff) | ((st.st_dev & 0xff) << 16) key = ((st.st_ino & 0xffff) | ((st.st_dev & 0xff) << 16)

View file

@ -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. */ /* If we were already using tzfile, check whether the file changed. */
struct stat64 st; struct __stat64_t64 st;
if (was_using_tzfile if (was_using_tzfile
&& __stat64 (file, &st) == 0 && __stat64_time64 (file, &st) == 0
&& tzfile_ino == st.st_ino && tzfile_dev == st.st_dev && tzfile_ino == st.st_ino && tzfile_dev == st.st_dev
&& tzfile_mtime == st.st_mtime) && tzfile_mtime == st.st_mtime)
goto done; /* Nothing to do. */ goto done; /* Nothing to do. */
@ -164,7 +164,7 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
goto ret_free_transitions; goto ret_free_transitions;
/* Get information about the file we are actually using. */ /* Get information about the file we are actually using. */
if (__fstat64 (__fileno (f), &st) != 0) if (__fstat64_time64 (__fileno (f), &st) != 0)
goto lose; goto lose;
free ((void *) transitions); free ((void *) transitions);