io: Add fts64 with 64-bit time_t support

Similar to glob, fts routines passes a stat pointer that might
differ of size and layout when 64-bit time API is used.

Checked on i686-linux-gnu and x86_64-linux-gnu.

Reviewed-by: Lukasz Majewski <lukma@denx.de>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Tested-by: Carlos O'Donell <carlos@redhat.com>
This commit is contained in:
Adhemerval Zanella 2021-03-03 09:00:13 -03:00
parent 84f7ce8447
commit 70961aee18
24 changed files with 227 additions and 6 deletions

View File

@ -1 +1,52 @@
#ifndef _FTS_H
#include <io/fts.h>
#ifndef _ISOMAC
# if __TIMESIZE != 64
# include <sys/stat.h>
typedef struct
{
struct _ftsent64_time64 *fts_cur;
struct _ftsent64_time64 *fts_child;
struct _ftsent64_time64 **fts_array;
dev_t fts_dev;
char *fts_path;
int fts_rfd;
int fts_pathlen;
int fts_nitems;
int (*fts_compar) (const void *, const void *);
int fts_options;
} FTS64_TIME64;
typedef struct _ftsent64_time64
{
struct _ftsent64_time64 *fts_cycle;
struct _ftsent64_time64 *fts_parent;
struct _ftsent64_time64 *fts_link;
long fts_number;
void *fts_pointer;
char *fts_accpath;
char *fts_path;
int fts_errno;
int fts_symfd;
unsigned short fts_pathlen;
unsigned short fts_namelen;
ino64_t fts_ino;
dev_t fts_dev;
nlink_t fts_nlink;
short fts_level;
unsigned short fts_info;
unsigned short fts_flags;
unsigned short fts_instr;
struct __stat64_t64 *fts_statp;
char fts_name[1];
} FSTENT64_TIME64;
# endif
#endif
#endif /* _FTS_H */

View File

@ -54,7 +54,8 @@ routines := \
posix_fadvise posix_fadvise64 \
posix_fallocate posix_fallocate64 \
sendfile sendfile64 copy_file_range \
utimensat futimens file_change_detection
utimensat futimens file_change_detection \
fts64-time64
others := pwd
test-srcs := ftwtest
@ -102,6 +103,7 @@ CFLAGS-statvfs.c += -fexceptions
CFLAGS-fstatvfs.c += -fexceptions
CFLAGS-fts.c += -Wno-uninitialized $(uses-callbacks) -fexceptions
CFLAGS-fts64.c += -Wno-uninitialized $(uses-callbacks) -fexceptions
CFLAGS-fts64-time64.c += -Wno-uninitialized $(uses-callbacks) -fexceptions
CFLAGS-ftw.c += $(uses-callbacks) -fexceptions
CFLAGS-ftw64.c += $(uses-callbacks) -fexceptions
CFLAGS-posix_fallocate.c += -fexceptions

View File

@ -187,6 +187,7 @@ FTSENT *fts_read (FTS *);
int fts_set (FTS *, FTSENT *, int) __THROW;
#else
# ifdef __REDIRECT
# ifndef __USE_TIME_BITS64
FTSENT *__REDIRECT (fts_children, (FTS *, int), fts64_children);
int __REDIRECT (fts_close, (FTS *), fts64_close);
FTS *__REDIRECT (fts_open, (char * const *, int,
@ -194,21 +195,53 @@ FTS *__REDIRECT (fts_open, (char * const *, int,
fts64_open);
FTSENT *__REDIRECT (fts_read, (FTS *), fts64_read);
int __REDIRECT_NTH (fts_set, (FTS *, FTSENT *, int), fts64_set);
# else
FTSENT *__REDIRECT (fts_children, (FTS *, int), __fts64_children_time64);
int __REDIRECT (fts_close, (FTS *), __fts64_close_time64);
FTS *__REDIRECT (fts_open, (char * const *, int,
int (*)(const FTSENT **, const FTSENT **)),
__fts64_open_time64);
FTSENT *__REDIRECT (fts_read, (FTS *), __fts64_read_time64);
int __REDIRECT_NTH (fts_set, (FTS *, FTSENT *, int),
__fts64_set_time64);
# endif
# else
# define fts_children fts64_children
# define fts_close fts64_close
# define fts_open fts64_open
# define fts_read fts64_read
# define fts_set fts64_set
# ifndef __USE_TIME_BITS64
# define fts_children fts64_children
# define fts_close fts64_close
# define fts_open fts64_open
# define fts_read fts64_read
# define fts_set fts64_set
# else
# endif
# endif
#endif
#ifdef __USE_LARGEFILE64
# ifndef __USE_TIME_BITS64
FTSENT64 *fts64_children (FTS64 *, int);
int fts64_close (FTS64 *);
FTS64 *fts64_open (char * const *, int,
int (*)(const FTSENT64 **, const FTSENT64 **));
FTSENT64 *fts64_read (FTS64 *);
int fts64_set (FTS64 *, FTSENT64 *, int) __THROW;
# else
# ifdef __REDIRECT
FTSENT *__REDIRECT (fts64_children, (FTS64 *, int), __fts64_children_time64);
int __REDIRECT (fts64_close, (FTS64 *), __fts64_close_time64);
FTS *__REDIRECT (fts64_open, (char * const *, int,
int (*)(const FTSENT64 **, const FTSENT64 **)),
__fts64_open_time64);
FTSENT *__REDIRECT (fts64_read, (FTS64 *), __fts64_read_time64);
int __REDIRECT_NTH (fts64_set, (FTS64 *, FTSENT64 *, int),
__fts64_set_time64);
# else
# define fts_children __fts64_children_time64
# define fts_close __fts64_close_time64
# define fts_open __fts64_open_time64
# define fts_read __fts64_read_time64
# define fts_set __fts64_set_time64
# endif
# endif
#endif
__END_DECLS

35
io/fts64-time64.c Normal file
View File

@ -0,0 +1,35 @@
/* File tree traversal functions LFS version.
Copyright (C) 2015-2021 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#include <time.h>
#if __TIMESIZE != 64
# define FTS_OPEN __fts64_open_time64
# define FTS_CLOSE __fts64_close_time64
# define FTS_READ __fts64_read_time64
# define FTS_SET __fts64_set_time64
# define FTS_CHILDREN __fts64_children_time64
# define FTSOBJ FTS64_TIME64
# define FTSENTRY FSTENT64_TIME64
# define INO_T ino64_t
# define STRUCT_STAT __stat64_t64
# define STAT __stat64_time64
# define LSTAT __lstat64_time64
# include "fts.c"
#endif

View File

@ -206,6 +206,11 @@ libc {
__futimens64;
__futimes64;
__futimesat64;
__fts64_open_time64;
__fts64_close_time64;
__fts64_read_time64;
__fts64_set_time64;
__fts64_children_time64;
__getitimer64;
__getrusage64;
__gettimeofday64;

View File

@ -203,6 +203,11 @@ GLIBC_2.34 __ctime64_r F
GLIBC_2.34 __difftime64 F
GLIBC_2.34 __fstat64_time64 F
GLIBC_2.34 __fstatat64_time64 F
GLIBC_2.34 __fts64_children_time64 F
GLIBC_2.34 __fts64_close_time64 F
GLIBC_2.34 __fts64_open_time64 F
GLIBC_2.34 __fts64_read_time64 F
GLIBC_2.34 __fts64_set_time64 F
GLIBC_2.34 __futimens64 F
GLIBC_2.34 __futimes64 F
GLIBC_2.34 __futimesat64 F

View File

@ -200,6 +200,11 @@ GLIBC_2.34 __ctime64_r F
GLIBC_2.34 __difftime64 F
GLIBC_2.34 __fstat64_time64 F
GLIBC_2.34 __fstatat64_time64 F
GLIBC_2.34 __fts64_children_time64 F
GLIBC_2.34 __fts64_close_time64 F
GLIBC_2.34 __fts64_open_time64 F
GLIBC_2.34 __fts64_read_time64 F
GLIBC_2.34 __fts64_set_time64 F
GLIBC_2.34 __futimens64 F
GLIBC_2.34 __futimes64 F
GLIBC_2.34 __futimesat64 F

View File

@ -2290,6 +2290,11 @@ GLIBC_2.34 __ctime64_r F
GLIBC_2.34 __difftime64 F
GLIBC_2.34 __fstat64_time64 F
GLIBC_2.34 __fstatat64_time64 F
GLIBC_2.34 __fts64_children_time64 F
GLIBC_2.34 __fts64_close_time64 F
GLIBC_2.34 __fts64_open_time64 F
GLIBC_2.34 __fts64_read_time64 F
GLIBC_2.34 __fts64_set_time64 F
GLIBC_2.34 __futimens64 F
GLIBC_2.34 __futimes64 F
GLIBC_2.34 __futimesat64 F

View File

@ -2244,6 +2244,11 @@ GLIBC_2.34 __ctime64_r F
GLIBC_2.34 __difftime64 F
GLIBC_2.34 __fstat64_time64 F
GLIBC_2.34 __fstatat64_time64 F
GLIBC_2.34 __fts64_children_time64 F
GLIBC_2.34 __fts64_close_time64 F
GLIBC_2.34 __fts64_open_time64 F
GLIBC_2.34 __fts64_read_time64 F
GLIBC_2.34 __fts64_set_time64 F
GLIBC_2.34 __futimens64 F
GLIBC_2.34 __futimes64 F
GLIBC_2.34 __futimesat64 F

View File

@ -2427,6 +2427,11 @@ GLIBC_2.34 __ctime64_r F
GLIBC_2.34 __difftime64 F
GLIBC_2.34 __fstat64_time64 F
GLIBC_2.34 __fstatat64_time64 F
GLIBC_2.34 __fts64_children_time64 F
GLIBC_2.34 __fts64_close_time64 F
GLIBC_2.34 __fts64_open_time64 F
GLIBC_2.34 __fts64_read_time64 F
GLIBC_2.34 __fts64_set_time64 F
GLIBC_2.34 __futimens64 F
GLIBC_2.34 __futimes64 F
GLIBC_2.34 __futimesat64 F

View File

@ -204,6 +204,11 @@ GLIBC_2.34 __ctime64_r F
GLIBC_2.34 __difftime64 F
GLIBC_2.34 __fstat64_time64 F
GLIBC_2.34 __fstatat64_time64 F
GLIBC_2.34 __fts64_children_time64 F
GLIBC_2.34 __fts64_close_time64 F
GLIBC_2.34 __fts64_open_time64 F
GLIBC_2.34 __fts64_read_time64 F
GLIBC_2.34 __fts64_set_time64 F
GLIBC_2.34 __futimens64 F
GLIBC_2.34 __futimes64 F
GLIBC_2.34 __futimesat64 F

View File

@ -2371,6 +2371,11 @@ GLIBC_2.34 __ctime64_r F
GLIBC_2.34 __difftime64 F
GLIBC_2.34 __fstat64_time64 F
GLIBC_2.34 __fstatat64_time64 F
GLIBC_2.34 __fts64_children_time64 F
GLIBC_2.34 __fts64_close_time64 F
GLIBC_2.34 __fts64_open_time64 F
GLIBC_2.34 __fts64_read_time64 F
GLIBC_2.34 __fts64_set_time64 F
GLIBC_2.34 __futimens64 F
GLIBC_2.34 __futimes64 F
GLIBC_2.34 __futimesat64 F

View File

@ -2341,6 +2341,11 @@ GLIBC_2.34 __ctime64_r F
GLIBC_2.34 __difftime64 F
GLIBC_2.34 __fstat64_time64 F
GLIBC_2.34 __fstatat64_time64 F
GLIBC_2.34 __fts64_children_time64 F
GLIBC_2.34 __fts64_close_time64 F
GLIBC_2.34 __fts64_open_time64 F
GLIBC_2.34 __fts64_read_time64 F
GLIBC_2.34 __fts64_set_time64 F
GLIBC_2.34 __futimens64 F
GLIBC_2.34 __futimes64 F
GLIBC_2.34 __futimesat64 F

View File

@ -2338,6 +2338,11 @@ GLIBC_2.34 __ctime64_r F
GLIBC_2.34 __difftime64 F
GLIBC_2.34 __fstat64_time64 F
GLIBC_2.34 __fstatat64_time64 F
GLIBC_2.34 __fts64_children_time64 F
GLIBC_2.34 __fts64_close_time64 F
GLIBC_2.34 __fts64_open_time64 F
GLIBC_2.34 __fts64_read_time64 F
GLIBC_2.34 __fts64_set_time64 F
GLIBC_2.34 __futimens64 F
GLIBC_2.34 __futimes64 F
GLIBC_2.34 __futimesat64 F

View File

@ -2336,6 +2336,11 @@ GLIBC_2.34 __ctime64_r F
GLIBC_2.34 __difftime64 F
GLIBC_2.34 __fstat64_time64 F
GLIBC_2.34 __fstatat64_time64 F
GLIBC_2.34 __fts64_children_time64 F
GLIBC_2.34 __fts64_close_time64 F
GLIBC_2.34 __fts64_open_time64 F
GLIBC_2.34 __fts64_read_time64 F
GLIBC_2.34 __fts64_set_time64 F
GLIBC_2.34 __futimens64 F
GLIBC_2.34 __futimes64 F
GLIBC_2.34 __futimesat64 F

View File

@ -2334,6 +2334,11 @@ GLIBC_2.34 __ctime64_r F
GLIBC_2.34 __difftime64 F
GLIBC_2.34 __fstat64_time64 F
GLIBC_2.34 __fstatat64_time64 F
GLIBC_2.34 __fts64_children_time64 F
GLIBC_2.34 __fts64_close_time64 F
GLIBC_2.34 __fts64_open_time64 F
GLIBC_2.34 __fts64_read_time64 F
GLIBC_2.34 __fts64_set_time64 F
GLIBC_2.34 __futimens64 F
GLIBC_2.34 __futimes64 F
GLIBC_2.34 __futimesat64 F

View File

@ -2342,6 +2342,11 @@ GLIBC_2.34 __ctime64_r F
GLIBC_2.34 __difftime64 F
GLIBC_2.34 __fstat64_time64 F
GLIBC_2.34 __fstatat64_time64 F
GLIBC_2.34 __fts64_children_time64 F
GLIBC_2.34 __fts64_close_time64 F
GLIBC_2.34 __fts64_open_time64 F
GLIBC_2.34 __fts64_read_time64 F
GLIBC_2.34 __fts64_set_time64 F
GLIBC_2.34 __futimens64 F
GLIBC_2.34 __futimes64 F
GLIBC_2.34 __futimesat64 F

View File

@ -2380,6 +2380,11 @@ GLIBC_2.34 __ctime64_r F
GLIBC_2.34 __difftime64 F
GLIBC_2.34 __fstat64_time64 F
GLIBC_2.34 __fstatat64_time64 F
GLIBC_2.34 __fts64_children_time64 F
GLIBC_2.34 __fts64_close_time64 F
GLIBC_2.34 __fts64_open_time64 F
GLIBC_2.34 __fts64_read_time64 F
GLIBC_2.34 __fts64_set_time64 F
GLIBC_2.34 __futimens64 F
GLIBC_2.34 __futimes64 F
GLIBC_2.34 __futimesat64 F

View File

@ -2398,6 +2398,11 @@ GLIBC_2.34 __ctime64_r F
GLIBC_2.34 __difftime64 F
GLIBC_2.34 __fstat64_time64 F
GLIBC_2.34 __fstatat64_time64 F
GLIBC_2.34 __fts64_children_time64 F
GLIBC_2.34 __fts64_close_time64 F
GLIBC_2.34 __fts64_open_time64 F
GLIBC_2.34 __fts64_read_time64 F
GLIBC_2.34 __fts64_set_time64 F
GLIBC_2.34 __futimens64 F
GLIBC_2.34 __futimes64 F
GLIBC_2.34 __futimesat64 F

View File

@ -2431,6 +2431,11 @@ GLIBC_2.34 __ctime64_r F
GLIBC_2.34 __difftime64 F
GLIBC_2.34 __fstat64_time64 F
GLIBC_2.34 __fstatat64_time64 F
GLIBC_2.34 __fts64_children_time64 F
GLIBC_2.34 __fts64_close_time64 F
GLIBC_2.34 __fts64_open_time64 F
GLIBC_2.34 __fts64_read_time64 F
GLIBC_2.34 __fts64_set_time64 F
GLIBC_2.34 __futimens64 F
GLIBC_2.34 __futimes64 F
GLIBC_2.34 __futimesat64 F

View File

@ -2396,6 +2396,11 @@ GLIBC_2.34 __ctime64_r F
GLIBC_2.34 __difftime64 F
GLIBC_2.34 __fstat64_time64 F
GLIBC_2.34 __fstatat64_time64 F
GLIBC_2.34 __fts64_children_time64 F
GLIBC_2.34 __fts64_close_time64 F
GLIBC_2.34 __fts64_open_time64 F
GLIBC_2.34 __fts64_read_time64 F
GLIBC_2.34 __fts64_set_time64 F
GLIBC_2.34 __futimens64 F
GLIBC_2.34 __futimes64 F
GLIBC_2.34 __futimesat64 F

View File

@ -2251,6 +2251,11 @@ GLIBC_2.34 __ctime64_r F
GLIBC_2.34 __difftime64 F
GLIBC_2.34 __fstat64_time64 F
GLIBC_2.34 __fstatat64_time64 F
GLIBC_2.34 __fts64_children_time64 F
GLIBC_2.34 __fts64_close_time64 F
GLIBC_2.34 __fts64_open_time64 F
GLIBC_2.34 __fts64_read_time64 F
GLIBC_2.34 __fts64_set_time64 F
GLIBC_2.34 __futimens64 F
GLIBC_2.34 __futimes64 F
GLIBC_2.34 __futimesat64 F

View File

@ -2248,6 +2248,11 @@ GLIBC_2.34 __ctime64_r F
GLIBC_2.34 __difftime64 F
GLIBC_2.34 __fstat64_time64 F
GLIBC_2.34 __fstatat64_time64 F
GLIBC_2.34 __fts64_children_time64 F
GLIBC_2.34 __fts64_close_time64 F
GLIBC_2.34 __fts64_open_time64 F
GLIBC_2.34 __fts64_read_time64 F
GLIBC_2.34 __fts64_set_time64 F
GLIBC_2.34 __futimens64 F
GLIBC_2.34 __futimes64 F
GLIBC_2.34 __futimesat64 F

View File

@ -2389,6 +2389,11 @@ GLIBC_2.34 __ctime64_r F
GLIBC_2.34 __difftime64 F
GLIBC_2.34 __fstat64_time64 F
GLIBC_2.34 __fstatat64_time64 F
GLIBC_2.34 __fts64_children_time64 F
GLIBC_2.34 __fts64_close_time64 F
GLIBC_2.34 __fts64_open_time64 F
GLIBC_2.34 __fts64_read_time64 F
GLIBC_2.34 __fts64_set_time64 F
GLIBC_2.34 __futimens64 F
GLIBC_2.34 __futimes64 F
GLIBC_2.34 __futimesat64 F