From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by sourceware.org (Postfix) with ESMTP id 6279539A0451 for ; Fri, 4 Jun 2021 19:39:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6279539A0451 Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-351-nBA6pukDPe6dLf6Z6naLyw-1; Fri, 04 Jun 2021 15:39:07 -0400 X-MC-Unique: nBA6pukDPe6dLf6Z6naLyw-1 Received: by mail-qt1-f200.google.com with SMTP id d7-20020ac811870000b02901e65f85117bso5818822qtj.18 for ; Fri, 04 Jun 2021 12:39:07 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:organization :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=TJXxUe1+h4ZfvYmnb7Lser12qR3zvCfIWtNgwsww8Cc=; b=Y11MU78hWOIPa5WIOvYM2iuKjlyZdWeiA6bihiK6QN411zOta9b1OFuUv8Gsln5z8X dvShGWHFbPK0Ww3DblVt33PHRXr2ZNcroeIkv5V+evY2ZO1nfCK+iILMYDChUkLTR14W xopNv1X86bdc4aR/DjEH4lEyMPGukwUMB2nFcL4zlOWYinpRZ+M9FdMGEtu5tZSt/g9h N58motVBNxFWstYVtJfX7oWRPltmEu/gKFmK2RtufrmwbqsoF8ex9PFqlIIL2WkXUOOq TW/Om7jsi6fU6Kuovjx46yZRJRVwfm3WjC7WyjLJlPWCG4EolPzO1o0Egy4CX7NrT/WW EXCA== X-Gm-Message-State: AOAM531Y1kAEtf331qhSVs+kaEDPzE4NsAnhtrvsLm6pIxfL3sv3bG8c 20R4+18a35LQ1cWWzr9SWmXbFkbh1tBKsx1/Ab/9UHEEtEMC/qsYd91wfSmw2SByAdKpYU/fmPC Vc66pGAbRdQGNnMkz4Wei X-Received: by 2002:ad4:5f0e:: with SMTP id fo14mr6399606qvb.42.1622835546755; Fri, 04 Jun 2021 12:39:06 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxxlYAPKIFGrPTMYhL1kmpJsDTWH6nzOxFSLi0K3VAMfBO0pClEtzMVbhz9YYTYq7zG5JqARA== X-Received: by 2002:ad4:5f0e:: with SMTP id fo14mr6399575qvb.42.1622835546366; Fri, 04 Jun 2021 12:39:06 -0700 (PDT) Received: from [192.168.1.16] (198-84-214-74.cpe.teksavvy.com. [198.84.214.74]) by smtp.gmail.com with ESMTPSA id s24sm4086374qtx.94.2021.06.04.12.39.05 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 04 Jun 2021 12:39:05 -0700 (PDT) Subject: Re: [PATCH v2 20/25] posix: Add glob64 with 64 bit time_t support To: Adhemerval Zanella , libc-alpha@sourceware.org References: <20210518205613.1487824-1-adhemerval.zanella@linaro.org> <20210518205613.1487824-21-adhemerval.zanella@linaro.org> From: Carlos O'Donell Organization: Red Hat Message-ID: Date: Fri, 4 Jun 2021 15:39:04 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 MIME-Version: 1.0 In-Reply-To: <20210518205613.1487824-21-adhemerval.zanella@linaro.org> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, NICE_REPLY_A, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, 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-List-Received-Date: Fri, 04 Jun 2021 19:39:15 -0000 On 5/18/21 4:56 PM, Adhemerval Zanella 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. Needs a v3 please. See below. Minor mistake in the test list? No regressions on x86_64, i686, ppc64le, aarch64, s390x. Tested-by: Carlos O'Donell > Checked on i686-linux-gnu and x86_64-linux-gnu. > --- > 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 > > #ifndef _ISOMAC > +# include OK. > + > 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 OK. > +# else > +# include > + > +typedef struct > + { > + size_t gl_pathc; OK. vs. __size_t > + char **gl_pathv; OK. vs. char** > + size_t gl_offs; OK. vs. __size_t > + int gl_flags; OK. vs. int. > + > + void (*gl_closedir) (void *); OK. func ptr. > + struct dirent64 *(*gl_readdir) (void *); OK. func ptr, but this one returns struct direent64 vs. struct direent. > + 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); OK. struct __stat64_t64 vs. struct stat for 64-bit time_t. > + } glob64_time64_t; OK. New ABI looks good to me. Should be the same size as the previous ABI. > + > +extern int __glob64_time64 (const char *pattern, int flags, > + int (*errfunc) (const char *, int), > + glob64_time64_t *pglob); OK, use new glob64_time64_t type for 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 \ This is not correct since it duplicates shm-directory. I expect you intended to fix the silly "\" way on the end. We should make all of those routines clearly into one entry per line to make merging easier. > + 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 > #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 > @@ -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; OK. > 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)); OK. > } > > /* 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)); OK. > } > > /* 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); OK. New ABI redirect. > +# 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); OK. > +# 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 OK. > > # include > > 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 > + . */ > + > +#include > +#include > +#include > + > +#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 OK. Stub. > 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 > + . */ > + > +#include > + > +#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 OK. Stub. > 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 OK. > > #include > > 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; OK. New ABI. > __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 > > 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 > #include > > +#define struct_stat struct stat > +#define struct_stat64 struct stat64 > +#define GLOB_LSTAT gl_lstat > +#define GLOB_STAT64 __stat64 > +#define GLOB_LSTAT64 __lstat64 OK. > + > #define glob64 __no_glob64_decl > #define __glob64 __no___glob64_decl > #include > 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 > > 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 > + . */ > + > +#include > + > +#if __TIMESIZE != 64 > +# include > +# include > +# include > + > +# 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 OK. Include posix/glob.c with different types. > +#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 > > 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 > + . */ > + > +#include > + > +#if __TIMESIZE != 64 > +# include > +# include > +# include > + > +# define glob_t glob64_time64_t > +# define globfree(pglob) __globfree64_time64 (pglob) > + > +# undef stat > +# define stat __stat64_t64 > + > +# include > +libc_hidden_def (__globfree64_time64) OK. > +#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 > -- Cheers, Carlos.