[PATCH v2 20/25] posix: Add glob64 with 64 bit time_t support

Lukasz Majewski lukma@denx.de
Wed May 19 10:44:00 GMT 2021


On Tue, 18 May 2021 17:56:08 -0300
Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote:

> The glob might pass a different stat struct for gl_stat and gl_lstat
> when GLOB_ALTDIRFUNC is used.  This requires add a new 64 time
> version that also uses 64 time stat functions.
> 
> Checked on i686-linux-gnu and x86_64-linux-gnu.

Reviewed-by: Lukasz Majewski <lukma@denx.de>

> ---
>  include/glob.h                                | 28 +++++++++++
>  posix/Makefile                                |  5 +-
>  posix/glob.c                                  | 46 +++++++++--------
>  posix/glob.h                                  | 22 +++++++++
>  posix/glob64-lstat-compat.c                   |  3 +-
>  posix/glob64-time64.c                         | 49
> +++++++++++++++++++ posix/globfree64-time64.c                     |
> 30 ++++++++++++ sysdeps/gnu/glob64-lstat-compat.c             |  3 +-
>  sysdeps/unix/sysv/linux/Versions              |  2 +
>  sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  2 +
>  sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  2 +
>  sysdeps/unix/sysv/linux/csky/libc.abilist     |  2 +
>  sysdeps/unix/sysv/linux/glob-lstat-compat.c   |  6 ++-
>  sysdeps/unix/sysv/linux/glob.c                |  6 +++
>  sysdeps/unix/sysv/linux/glob64-lstat-compat.c | 12 ++---
>  sysdeps/unix/sysv/linux/glob64-time64.c       | 44 +++++++++++++++++
>  sysdeps/unix/sysv/linux/glob64.c              |  8 +--
>  sysdeps/unix/sysv/linux/globfree64-time64.c   | 35 +++++++++++++
>  sysdeps/unix/sysv/linux/hppa/libc.abilist     |  2 +
>  sysdeps/unix/sysv/linux/i386/libc.abilist     |  2 +
>  .../sysv/linux/m68k/coldfire/libc.abilist     |  2 +
>  .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  2 +
>  .../sysv/linux/microblaze/be/libc.abilist     |  2 +
>  .../sysv/linux/microblaze/le/libc.abilist     |  2 +
>  .../sysv/linux/mips/mips32/fpu/libc.abilist   |  2 +
>  .../sysv/linux/mips/mips32/nofpu/libc.abilist |  2 +
>  .../sysv/linux/mips/mips64/n32/libc.abilist   |  2 +
>  sysdeps/unix/sysv/linux/nios2/libc.abilist    |  2 +
>  sysdeps/unix/sysv/linux/oldglob.c             | 11 ++---
>  .../linux/powerpc/powerpc32/fpu/libc.abilist  |  2 +
>  .../powerpc/powerpc32/nofpu/libc.abilist      |  2 +
>  .../unix/sysv/linux/s390/s390-32/libc.abilist |  2 +
>  sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  2 +
>  sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  2 +
>  .../sysv/linux/sparc/sparc32/libc.abilist     |  2 +
>  35 files changed, 308 insertions(+), 40 deletions(-)
>  create mode 100644 posix/glob64-time64.c
>  create mode 100644 posix/globfree64-time64.c
>  create mode 100644 sysdeps/unix/sysv/linux/glob64-time64.c
>  create mode 100644 sysdeps/unix/sysv/linux/globfree64-time64.c
> 
> diff --git a/include/glob.h b/include/glob.h
> index 1d2f78793e..f48c71960d 100644
> --- a/include/glob.h
> +++ b/include/glob.h
> @@ -2,11 +2,39 @@
>  #include <posix/glob.h>
>  
>  #ifndef _ISOMAC
> +# include <sys/types.h>
> +
>  libc_hidden_proto (glob)
>  libc_hidden_proto (glob64)
>  libc_hidden_proto (globfree)
>  libc_hidden_proto (globfree64)
>  
> +# if __TIMESIZE == 64
> +#  define glob64_time64_t glob64_t
> +# else
> +# include <sys/stat.h>
> +
> +typedef struct
> +  {
> +    size_t gl_pathc;
> +    char **gl_pathv;
> +    size_t gl_offs;
> +    int gl_flags;
> +
> +    void (*gl_closedir) (void *);
> +    struct dirent64 *(*gl_readdir) (void *);
> +    void *(*gl_opendir) (const char *);
> +    int (*gl_lstat) (const char *__restrict, struct __stat64_t64
> *__restrict);
> +    int (*gl_stat) (const char *__restrict, struct __stat64_t64
> *__restrict);
> +  } glob64_time64_t;
> +
> +extern int __glob64_time64 (const char *pattern, int flags,
> +			    int (*errfunc) (const char *, int),
> +			    glob64_time64_t *pglob);
> +void __globfree64_time64 (glob64_time64_t *pglob);
> +libc_hidden_proto (__globfree64_time64)
> +# endif
> +
>  /* Now define the internal interfaces.  */
>  extern int __glob_pattern_p (const char *__pattern, int __quote);
>  extern int __glob64 (const char *__pattern, int __flags,
> diff --git a/posix/Makefile b/posix/Makefile
> index fa0dc0ea20..84204b1270 100644
> --- a/posix/Makefile
> +++ b/posix/Makefile
> @@ -67,7 +67,10 @@ routines :=
> 			      \ get_child_max sched_cpucount
> sched_cpualloc sched_cpufree \ streams-compat \
>  	shm-directory
>          \
> -	execveat
> +	execveat \
> +	shm-directory \
> +	glob64-time64 \
> +	globfree64-time64
>  
>  aux		:= init-posix environ
>  tests		:= test-errno tstgetopt testfnm runtests
> runptests \ diff --git a/posix/glob.c b/posix/glob.c
> index 32c88e5d15..593a4c358f 100644
> --- a/posix/glob.c
> +++ b/posix/glob.c
> @@ -59,25 +59,37 @@
>  # define readdir(str) __readdir64 (str)
>  # define getpwnam_r(name, bufp, buf, len, res) \
>      __getpwnam_r (name, bufp, buf, len, res)
> -# define struct_stat64          struct stat64
>  # define FLEXIBLE_ARRAY_MEMBER
> +# ifndef struct_stat
> +#  define struct_stat           struct stat
> +# endif
> +# ifndef struct_stat64
> +#  define struct_stat64         struct stat64
> +# endif
> +# ifndef GLOB_LSTAT
> +#  define GLOB_LSTAT            gl_lstat
> +# endif
> +# ifndef GLOB_STAT64
> +#  define GLOB_STAT64           __stat64
> +# endif
> +# ifndef GLOB_LSTAT64
> +#  define GLOB_LSTAT64          __lstat64
> +# endif
>  # include <shlib-compat.h>
>  #else /* !_LIBC */
>  # define __glob                 glob
>  # define __getlogin_r(buf, len) getlogin_r (buf, len)
> -# define __lstat64(fname, buf)  lstat (fname, buf)
> -# if defined _WIN32 && !defined __CYGWIN__
> -   /* Avoid GCC or clang warning.  The original __stat64 macro is
> unused.  */ -#  undef __stat64
> -# endif
> -# define __stat64(fname, buf)   stat (fname, buf)
>  # define __fxstatat64(_, d, f, st, flag) fstatat (d, f, st, flag)
> -# define struct_stat64          struct stat
>  # ifndef __MVS__
>  #  define __alloca              alloca
>  # endif
>  # define __readdir              readdir
>  # define COMPILE_GLOB64
> +# define struct_stat            struct stat
> +# define struct_stat64          struct stat
> +# define GLOB_LSTAT             gl_lstat
> +# define GLOB_STAT64            stat
> +# define GLOB_LSTAT64           lstat
>  #endif /* _LIBC */
>  
>  #include <fnmatch.h>
> @@ -196,22 +208,14 @@ glob_lstat (glob_t *pglob, int flags, const
> char *fullname) {
>  /* Use on glob-lstat-compat.c to provide a compat symbol which does
> not use lstat / gl_lstat.  */
> -#ifdef GLOB_NO_LSTAT
> -# define GL_LSTAT gl_stat
> -# define LSTAT64 __stat64
> -#else
> -# define GL_LSTAT gl_lstat
> -# define LSTAT64 __lstat64
> -#endif
> -
>    union
>    {
> -    struct stat st;
> +    struct_stat st;
>      struct_stat64 st64;
>    } ust;
>    return (__glibc_unlikely (flags & GLOB_ALTDIRFUNC)
> -          ? pglob->GL_LSTAT (fullname, &ust.st)
> -          : LSTAT64 (fullname, &ust.st64));
> +          ? pglob->GLOB_LSTAT (fullname, &ust.st)
> +          : GLOB_LSTAT64 (fullname, &ust.st64));
>  }
>  
>  /* Set *R = A + B.  Return true if the answer is mathematically
> @@ -249,11 +253,11 @@ static int collated_compare (const void *,
> const void *) __THROWNL; static bool
>  is_dir (char const *filename, int flags, glob_t const *pglob)
>  {
> -  struct stat st;
> +  struct_stat st;
>    struct_stat64 st64;
>    return (__glibc_unlikely (flags & GLOB_ALTDIRFUNC)
>            ? pglob->gl_stat (filename, &st) == 0 && S_ISDIR
> (st.st_mode)
> -          : __stat64 (filename, &st64) == 0 && S_ISDIR
> (st64.st_mode));
> +          : GLOB_STAT64 (filename, &st64) == 0 && S_ISDIR
> (st64.st_mode)); }
>  
>  /* Find the end of the sub-pattern in a brace expression.  */
> diff --git a/posix/glob.h b/posix/glob.h
> index b5686600c7..700aeb2392 100644
> --- a/posix/glob.h
> +++ b/posix/glob.h
> @@ -150,20 +150,42 @@ extern int glob (const char *__restrict
> __pattern, int __flags, /* Free storage allocated in PGLOB by a
> previous `glob' call.  */ extern void globfree (glob_t *__pglob)
> __THROW; #else
> +# ifdef __USE_TIME_BITS64
> +extern int __REDIRECT_NTHNL (glob, (const char *__restrict __pattern,
> +				    int __flags,
> +				    int (*__errfunc) (const char *,
> int),
> +				    glob_t *__restrict __pglob),
> +			     __glob64_time64);
> +
> +extern void __REDIRECT_NTH (globfree, (glob_t *__pglob),
> +			    __globfree64_time64);
> +# else
>  extern int __REDIRECT_NTHNL (glob, (const char *__restrict __pattern,
>  				    int __flags,
>  				    int (*__errfunc) (const char *,
> int), glob_t *__restrict __pglob), glob64);
>  
>  extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), globfree64);
> +# endif
>  #endif
>  
>  #ifdef __USE_LARGEFILE64
> +# ifdef __USE_TIME_BITS64
> +extern int __REDIRECT_NTHNL (glob64, (const char *__restrict
> __pattern,
> +				      int __flags,
> +				      int (*__errfunc) (const char
> *, int),
> +				      glob64_t *__restrict __pglob),
> +			     __glob64_time64);
> +
> +extern void __REDIRECT_NTH (globfree64, (glob64_t *__pglob),
> +			    __globfree64_time64);
> +# else
>  extern int glob64 (const char *__restrict __pattern, int __flags,
>  		   int (*__errfunc) (const char *, int),
>  		   glob64_t *__restrict __pglob) __THROWNL;
>  
>  extern void globfree64 (glob64_t *__pglob) __THROW;
> +# endif
>  #endif
>  
>  
> diff --git a/posix/glob64-lstat-compat.c b/posix/glob64-lstat-compat.c
> index bd81a1e390..e90d4ae93e 100644
> --- a/posix/glob64-lstat-compat.c
> +++ b/posix/glob64-lstat-compat.c
> @@ -28,7 +28,8 @@
>  # define GLOB_ATTRIBUTE attribute_compat_text_section
>  
>  /* Avoid calling gl_lstat with GLOB_ALTDIRFUNC.  */
> -# define GLOB_NO_LSTAT
> +# define GLOB_LSTAT   gl_stat
> +# define GLOB_LSTAT64 __stat64
>  
>  # include <posix/glob64.c>
>  
> diff --git a/posix/glob64-time64.c b/posix/glob64-time64.c
> new file mode 100644
> index 0000000000..04db45f93a
> --- /dev/null
> +++ b/posix/glob64-time64.c
> @@ -0,0 +1,49 @@
> +/* Long File Support glob with 64 bit time support.
> +   Copyright (C) 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 <errno.h>
> +#include <glob.h>
> +#include <stddef.h>
> +
> +#if __TIMESIZE != 64
> +
> +/* Do glob searching for PATTERN, placing results in PGLOB.
> +   The bits defined above may be set in FLAGS.
> +   If a directory cannot be opened or read and ERRFUNC is not nil,
> +   it is called with the pathname that caused the error, and the
> +   `errno' value from the failing call; if it returns non-zero
> +   `glob' returns GLOB_ABORTED; if it returns zero, the error is
> ignored.
> +   If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned.
> +   Otherwise, `glob' returns zero.  */
> +int
> +__glob64_time64 (const char *pattern, int flags,
> +		 int (*errfunc) (const char *, int), glob64_time64_t
> *pglob) +{
> +  if (pattern == NULL || pglob == NULL || (flags & ~__GLOB_FLAGS) !=
> 0)
> +    {
> +      __set_errno (EINVAL);
> +      return -1;
> +    }
> +
> +  __set_errno (ENOSYS);
> +  return GLOB_NOSYS;
> +}
> +
> +stub_warning (glob64)
> +
> +#endif
> diff --git a/posix/globfree64-time64.c b/posix/globfree64-time64.c
> new file mode 100644
> index 0000000000..d815bc6df1
> --- /dev/null
> +++ b/posix/globfree64-time64.c
> @@ -0,0 +1,30 @@
> +/* Long File Support globfree with 64 bit time support.
> +   Copyright (C) 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 <glob.h>
> +
> +#if __TIMESIZE != 64
> +
> +/* Free storage allocated in PGLOB by a previous `glob' call.  */
> +void
> +__globfree64_time64 (glob64_time64_t *pglob)
> +{
> +}
> +libc_hidden_def (__globfree64_time64)
> +
> +#endif
> diff --git a/sysdeps/gnu/glob64-lstat-compat.c
> b/sysdeps/gnu/glob64-lstat-compat.c index 6764f1d062..ade4ccac8a
> 100644 --- a/sysdeps/gnu/glob64-lstat-compat.c
> +++ b/sysdeps/gnu/glob64-lstat-compat.c
> @@ -39,7 +39,8 @@
>  #define GLOB_ATTRIBUTE attribute_compat_text_section
>  
>  /* Avoid calling gl_lstat with GLOB_ALTDIRFUNC.  */
> -#define GLOB_NO_LSTAT
> +#define GLOB_LSTAT   gl_stat
> +#define GLOB_LSTAT64 __stat64
>  
>  #include <posix/glob.c>
>  
> diff --git a/sysdeps/unix/sysv/linux/Versions
> b/sysdeps/unix/sysv/linux/Versions index 52fedc61f0..27a464483b 100644
> --- a/sysdeps/unix/sysv/linux/Versions
> +++ b/sysdeps/unix/sysv/linux/Versions
> @@ -192,6 +192,8 @@ libc {
>      __getitimer64;
>      __getrusage64;
>      __gettimeofday64;
> +    __glob64_time64;
> +    __globfree64_time64;
>      __gmtime64;
>      __gmtime64_r;
>      __localtime64;
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> b/sysdeps/unix/sysv/linux/arm/be/libc.abilist index
> 694033a42b..397c97cc16 100644 ---
> a/sysdeps/unix/sysv/linux/arm/be/libc.abilist +++
> b/sysdeps/unix/sysv/linux/arm/be/libc.abilist @@ -208,6 +208,8 @@
> GLIBC_2.34 __futimesat64 F GLIBC_2.34 __getitimer64 F
>  GLIBC_2.34 __getrusage64 F
>  GLIBC_2.34 __gettimeofday64 F
> +GLIBC_2.34 __glob64_time64 F
> +GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
>  GLIBC_2.34 __libc_start_main F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> b/sysdeps/unix/sysv/linux/arm/le/libc.abilist index
> 1ead45904f..9bc948703c 100644 ---
> a/sysdeps/unix/sysv/linux/arm/le/libc.abilist +++
> b/sysdeps/unix/sysv/linux/arm/le/libc.abilist @@ -205,6 +205,8 @@
> GLIBC_2.34 __futimesat64 F GLIBC_2.34 __getitimer64 F
>  GLIBC_2.34 __getrusage64 F
>  GLIBC_2.34 __gettimeofday64 F
> +GLIBC_2.34 __glob64_time64 F
> +GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
>  GLIBC_2.34 __libc_start_main F
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist
> b/sysdeps/unix/sysv/linux/csky/libc.abilist index
> e8fce124fd..0f84021d9f 100644 ---
> a/sysdeps/unix/sysv/linux/csky/libc.abilist +++
> b/sysdeps/unix/sysv/linux/csky/libc.abilist @@ -2285,6 +2285,8 @@
> GLIBC_2.34 __futimesat64 F GLIBC_2.34 __getitimer64 F
>  GLIBC_2.34 __getrusage64 F
>  GLIBC_2.34 __gettimeofday64 F
> +GLIBC_2.34 __glob64_time64 F
> +GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
>  GLIBC_2.34 __libc_start_main F
> diff --git a/sysdeps/unix/sysv/linux/glob-lstat-compat.c
> b/sysdeps/unix/sysv/linux/glob-lstat-compat.c index
> 1f502e3299..7729e0dc12 100644 ---
> a/sysdeps/unix/sysv/linux/glob-lstat-compat.c +++
> b/sysdeps/unix/sysv/linux/glob-lstat-compat.c @@ -30,7 +30,11 @@
>  #define GLOB_ATTRIBUTE attribute_compat_text_section
>  
>  /* Avoid calling gl_lstat with GLOB_ALTDIRFUNC.  */
> -#define GLOB_NO_LSTAT
> +#define struct_stat    struct stat
> +#define struct_stat64  struct stat64
> +#define GLOB_LSTAT     gl_stat
> +#define GLOB_STAT64    __stat64
> +#define GLOB_LSTAT64   __stat64
>  
>  #include <posix/glob.c>
>  
> diff --git a/sysdeps/unix/sysv/linux/glob.c
> b/sysdeps/unix/sysv/linux/glob.c index 1be4885b96..89c287d01d 100644
> --- a/sysdeps/unix/sysv/linux/glob.c
> +++ b/sysdeps/unix/sysv/linux/glob.c
> @@ -19,6 +19,12 @@
>  #include <sys/stat.h>
>  #include <kernel_stat.h>
>  
> +#define struct_stat    struct stat
> +#define struct_stat64  struct stat64
> +#define GLOB_LSTAT     gl_lstat
> +#define GLOB_STAT64    __stat64
> +#define GLOB_LSTAT64   __lstat64
> +
>  #define glob64 __no_glob64_decl
>  #define __glob64 __no___glob64_decl
>  #include <posix/glob.c>
> diff --git a/sysdeps/unix/sysv/linux/glob64-lstat-compat.c
> b/sysdeps/unix/sysv/linux/glob64-lstat-compat.c index
> 40ad625f58..302a44d3a4 100644 ---
> a/sysdeps/unix/sysv/linux/glob64-lstat-compat.c +++
> b/sysdeps/unix/sysv/linux/glob64-lstat-compat.c @@ -33,15 +33,15 @@
>  # define __glob __glob64_lstat_compat
>  # define globfree globfree64
>  
> -# undef stat
> -# define stat stat64
> -
> -# define COMPILE_GLOB64	1
> -
>  # define GLOB_ATTRIBUTE attribute_compat_text_section
>  
>  /* Avoid calling gl_lstat with GLOB_ALTDIRFUNC.  */
> -# define GLOB_NO_LSTAT
> +# define COMPILE_GLOB64	1
> +# define struct_stat    struct stat64
> +# define struct_stat64  struct stat64
> +# define GLOB_LSTAT     gl_stat
> +# define GLOB_STAT64    __stat64
> +# define GLOB_LSTAT64   __stat64
>  
>  # include <posix/glob.c>
>  
> diff --git a/sysdeps/unix/sysv/linux/glob64-time64.c
> b/sysdeps/unix/sysv/linux/glob64-time64.c new file mode 100644
> index 0000000000..260f067fa4
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/glob64-time64.c
> @@ -0,0 +1,44 @@
> +/* Find pathnames matching a pattern.  Linux version.
> +   Copyright (C) 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 <sys/stat.h>
> +
> +#if __TIMESIZE != 64
> +# include <glob.h>
> +# include <dirent.h>
> +# include <sys/stat.h>
> +
> +# define dirent dirent64
> +# define __readdir(dirp) __readdir64 (dirp)
> +
> +# define glob_t glob64_time64_t
> +# define __glob __glob64_time64
> +
> +# define globfree(pglob) __globfree64_time64 (pglob)
> +
> +# define COMPILE_GLOB64  1
> +# define struct_stat     struct __stat64_t64
> +# define struct_stat64   struct __stat64_t64
> +# define GLOB_LSTAT      gl_lstat
> +# define GLOB_STAT64     __stat64_time64
> +# define GLOB_LSTAT64    __lstat64_time64
> +
> +# define COMPILE_GLOB64	1
> +
> +# include <posix/glob.c>
> +#endif
> diff --git a/sysdeps/unix/sysv/linux/glob64.c
> b/sysdeps/unix/sysv/linux/glob64.c index 3cbadf34fb..572ca215df 100644
> --- a/sysdeps/unix/sysv/linux/glob64.c
> +++ b/sysdeps/unix/sysv/linux/glob64.c
> @@ -31,10 +31,12 @@
>  # define __glob __glob64
>  # define globfree(pglob) globfree64 (pglob)
>  
> -# undef stat
> -# define stat stat64
> -
>  # define COMPILE_GLOB64	1
> +# define struct_stat    struct stat64
> +# define struct_stat64  struct stat64
> +# define GLOB_LSTAT     gl_lstat
> +# define GLOB_STAT64    __stat64
> +# define GLOB_LSTAT64   __lstat64
>  
>  # include <posix/glob.c>
>  
> diff --git a/sysdeps/unix/sysv/linux/globfree64-time64.c
> b/sysdeps/unix/sysv/linux/globfree64-time64.c new file mode 100644
> index 0000000000..d6b1e6ac49
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/globfree64-time64.c
> @@ -0,0 +1,35 @@
> +/* Frees the dynamically allocated storage from an earlier call to
> glob.
> +   Linux version.
> +   Copyright (C) 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 <sys/stat.h>
> +
> +#if __TIMESIZE != 64
> +# include <glob.h>
> +# include <dirent.h>
> +# include <sys/stat.h>
> +
> +# define glob_t glob64_time64_t
> +# define globfree(pglob) __globfree64_time64 (pglob)
> +
> +# undef stat
> +# define stat __stat64_t64
> +
> +# include <posix/globfree.c>
> +libc_hidden_def (__globfree64_time64)
> +#endif
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> b/sysdeps/unix/sysv/linux/hppa/libc.abilist index
> f196d94139..31caf8ebc3 100644 ---
> a/sysdeps/unix/sysv/linux/hppa/libc.abilist +++
> b/sysdeps/unix/sysv/linux/hppa/libc.abilist @@ -2238,6 +2238,8 @@
> GLIBC_2.34 __futimesat64 F GLIBC_2.34 __getitimer64 F
>  GLIBC_2.34 __getrusage64 F
>  GLIBC_2.34 __gettimeofday64 F
> +GLIBC_2.34 __glob64_time64 F
> +GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
>  GLIBC_2.34 __libc_start_main F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist
> b/sysdeps/unix/sysv/linux/i386/libc.abilist index
> 0687af280c..75b71b8a5b 100644 ---
> a/sysdeps/unix/sysv/linux/i386/libc.abilist +++
> b/sysdeps/unix/sysv/linux/i386/libc.abilist @@ -2420,6 +2420,8 @@
> GLIBC_2.34 __futimesat64 F GLIBC_2.34 __getitimer64 F
>  GLIBC_2.34 __getrusage64 F
>  GLIBC_2.34 __gettimeofday64 F
> +GLIBC_2.34 __glob64_time64 F
> +GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
>  GLIBC_2.34 __isnanf128 F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist index
> bfd2b7c135..2f93afc071 100644 ---
> a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist +++
> b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist @@ -209,6 +209,8
> @@ GLIBC_2.34 __futimesat64 F GLIBC_2.34 __getitimer64 F
>  GLIBC_2.34 __getrusage64 F
>  GLIBC_2.34 __gettimeofday64 F
> +GLIBC_2.34 __glob64_time64 F
> +GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
>  GLIBC_2.34 __libc_start_main F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist index
> 2bd9f7ab64..dc074cf576 100644 ---
> a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist +++
> b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist @@ -2364,6 +2364,8
> @@ GLIBC_2.34 __futimesat64 F GLIBC_2.34 __getitimer64 F
>  GLIBC_2.34 __getrusage64 F
>  GLIBC_2.34 __gettimeofday64 F
> +GLIBC_2.34 __glob64_time64 F
> +GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
>  GLIBC_2.34 __libc_start_main F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist index
> 2436c57b2e..a8b8366c48 100644 ---
> a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist +++
> b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist @@ -2336,6
> +2336,8 @@ GLIBC_2.34 __futimesat64 F GLIBC_2.34 __getitimer64 F
>  GLIBC_2.34 __getrusage64 F
>  GLIBC_2.34 __gettimeofday64 F
> +GLIBC_2.34 __glob64_time64 F
> +GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
>  GLIBC_2.34 __libc_start_main F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist index
> 1262d01845..63e3b096e3 100644 ---
> a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist +++
> b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist @@ -2333,6
> +2333,8 @@ GLIBC_2.34 __futimesat64 F GLIBC_2.34 __getitimer64 F
>  GLIBC_2.34 __getrusage64 F
>  GLIBC_2.34 __gettimeofday64 F
> +GLIBC_2.34 __glob64_time64 F
> +GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
>  GLIBC_2.34 __libc_start_main F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist index
> 2812b458c8..3d17b78b42 100644 ---
> a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist +++
> b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist @@ -2329,6
> +2329,8 @@ GLIBC_2.34 __futimesat64 F GLIBC_2.34 __getitimer64 F
>  GLIBC_2.34 __getrusage64 F
>  GLIBC_2.34 __gettimeofday64 F
> +GLIBC_2.34 __glob64_time64 F
> +GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
>  GLIBC_2.34 __libc_start_main F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist index
> 782c5470a6..ba96f15040 100644 ---
> a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist +++
> b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist @@ -2327,6
> +2327,8 @@ GLIBC_2.34 __futimesat64 F GLIBC_2.34 __getitimer64 F
>  GLIBC_2.34 __getrusage64 F
>  GLIBC_2.34 __gettimeofday64 F
> +GLIBC_2.34 __glob64_time64 F
> +GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
>  GLIBC_2.34 __libc_start_main F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist index
> 3487d0f4c3..04cc170344 100644 ---
> a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist +++
> b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist @@ -2335,6
> +2335,8 @@ GLIBC_2.34 __futimesat64 F GLIBC_2.34 __getitimer64 F
>  GLIBC_2.34 __getrusage64 F
>  GLIBC_2.34 __gettimeofday64 F
> +GLIBC_2.34 __glob64_time64 F
> +GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
>  GLIBC_2.34 __libc_start_main F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist
> b/sysdeps/unix/sysv/linux/nios2/libc.abilist index
> 056254475b..ce21e19622 100644 ---
> a/sysdeps/unix/sysv/linux/nios2/libc.abilist +++
> b/sysdeps/unix/sysv/linux/nios2/libc.abilist @@ -2375,6 +2375,8 @@
> GLIBC_2.34 __futimesat64 F GLIBC_2.34 __getitimer64 F
>  GLIBC_2.34 __getrusage64 F
>  GLIBC_2.34 __gettimeofday64 F
> +GLIBC_2.34 __glob64_time64 F
> +GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
>  GLIBC_2.34 __libc_start_main F
> diff --git a/sysdeps/unix/sysv/linux/oldglob.c
> b/sysdeps/unix/sysv/linux/oldglob.c index 59bf89dc1d..a9a4439ddb
> 100644 --- a/sysdeps/unix/sysv/linux/oldglob.c
> +++ b/sysdeps/unix/sysv/linux/oldglob.c
> @@ -28,13 +28,12 @@ libc_hidden_proto (__old_glob64);
>  #define convert_dirent __old_convert_dirent
>  #define glob_in_dir __old_glob_in_dir
>  
> -#undef stat
> -#define stat stat64
> -#undef __stat
> -#define __stat(file, buf) __stat64 (file, buf)
> -
>  /* Avoid calling gl_lstat with GLOB_ALTDIRFUNC.  */
> -#define GLOB_NO_LSTAT
> +#define struct_stat    struct stat64
> +#define struct_stat64  struct stat64
> +#define GLOB_LSTAT     gl_stat
> +#define GLOB_STAT64    __stat64
> +#define GLOB_LSTAT64   __stat64
>  
>  #define GLOB_ATTRIBUTE attribute_compat_text_section
>  
> diff --git
> a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist index
> 98e1da179b..4cfae3b735 100644 ---
> a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist +++
> b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist @@
> -2391,6 +2391,8 @@ GLIBC_2.34 __futimesat64 F GLIBC_2.34
> __getitimer64 F GLIBC_2.34 __getrusage64 F GLIBC_2.34
> __gettimeofday64 F +GLIBC_2.34 __glob64_time64 F
> +GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
>  GLIBC_2.34 __libc_start_main F
> diff --git
> a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist index
> 6dc0ecf108..3e03f313b1 100644 ---
> a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist +++
> b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist @@
> -2424,6 +2424,8 @@ GLIBC_2.34 __futimesat64 F GLIBC_2.34
> __getitimer64 F GLIBC_2.34 __getrusage64 F GLIBC_2.34
> __gettimeofday64 F +GLIBC_2.34 __glob64_time64 F
> +GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
>  GLIBC_2.34 __libc_start_main F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist index
> 230031f2be..4dfdc61761 100644 ---
> a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist +++
> b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist @@ -2389,6
> +2389,8 @@ GLIBC_2.34 __futimesat64 F GLIBC_2.34 __getitimer64 F
>  GLIBC_2.34 __getrusage64 F
>  GLIBC_2.34 __gettimeofday64 F
> +GLIBC_2.34 __glob64_time64 F
> +GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
>  GLIBC_2.34 __libc_start_main F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> b/sysdeps/unix/sysv/linux/sh/be/libc.abilist index
> 72073ecc27..2c00100dd6 100644 ---
> a/sysdeps/unix/sysv/linux/sh/be/libc.abilist +++
> b/sysdeps/unix/sysv/linux/sh/be/libc.abilist @@ -2245,6 +2245,8 @@
> GLIBC_2.34 __futimesat64 F GLIBC_2.34 __getitimer64 F
>  GLIBC_2.34 __getrusage64 F
>  GLIBC_2.34 __gettimeofday64 F
> +GLIBC_2.34 __glob64_time64 F
> +GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
>  GLIBC_2.34 __libc_start_main F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> b/sysdeps/unix/sysv/linux/sh/le/libc.abilist index
> e07c4657f9..2bcf38af9b 100644 ---
> a/sysdeps/unix/sysv/linux/sh/le/libc.abilist +++
> b/sysdeps/unix/sysv/linux/sh/le/libc.abilist @@ -2242,6 +2242,8 @@
> GLIBC_2.34 __futimesat64 F GLIBC_2.34 __getitimer64 F
>  GLIBC_2.34 __getrusage64 F
>  GLIBC_2.34 __gettimeofday64 F
> +GLIBC_2.34 __glob64_time64 F
> +GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
>  GLIBC_2.34 __libc_start_main F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist index
> 7467677c1b..dad08de21f 100644 ---
> a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist +++
> b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist @@ -2382,6
> +2382,8 @@ GLIBC_2.34 __futimesat64 F GLIBC_2.34 __getitimer64 F
>  GLIBC_2.34 __getrusage64 F
>  GLIBC_2.34 __gettimeofday64 F
> +GLIBC_2.34 __glob64_time64 F
> +GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
>  GLIBC_2.34 __libc_start_main F



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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <https://sourceware.org/pipermail/libc-alpha/attachments/20210519/249bc6e9/attachment-0001.sig>


More information about the Libc-alpha mailing list