From patchwork Fri Mar 5 20:15:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 42320 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 0F373399F038; Fri, 5 Mar 2021 20:16:16 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0F373399F038 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1614975376; bh=JfENS8eXyHKDypbH0OnMfb3MHtV3AnBvnHeqfoRO8sM=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=o0tetznkG1s5qW+E6kAbJnrZ6fTtm5/SJGD+w2i8uxi9zTqXZkcIE3dFUNl6SxbMc Q6I3VgXxh4+ZXgINQkRx3XGLJD0YBBv/Af2zNwQYnhDzq8PigrcohC9+JEoqMz1u0f /xwbFXalFJBsrDIg+n+lsstcGkstEoXEtuStv7oM= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-qk1-x735.google.com (mail-qk1-x735.google.com [IPv6:2607:f8b0:4864:20::735]) by sourceware.org (Postfix) with ESMTPS id 7D70A399F031 for ; Fri, 5 Mar 2021 20:16:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 7D70A399F031 Received: by mail-qk1-x735.google.com with SMTP id f124so3288696qkj.5 for ; Fri, 05 Mar 2021 12:16:11 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=JfENS8eXyHKDypbH0OnMfb3MHtV3AnBvnHeqfoRO8sM=; b=ieEYwR/G53x2TzCtI7dygQDI3mXnZjdl+Sl3V3CRc1XzD57u7FaqFR8kpPhUmwA4KP VeG3rgNlfzqvyTSkPnnkhx4x0VyI6AVE/XryPSqiZUJtG80F8T5w5101PwvwwKsbU3Vd KKvSKDqmno6MQRgxyNUwc/gXbEOA4i1y/gMp92AlbC8lRPQUFvLk7viIS+mXreVpeTV0 YCPaAafGXunj/g/NZa5hFsRFRdsKRhy3PZMe+I+MlqETd0SsB0O3PkTyvosAitvlCNAy pjoSUVK9HVoARF9LLLsHI9Zc8brNQ0J19t2LJJH4nURuCZzymhbT/6xWXHIcbKAuHF/6 RZEg== X-Gm-Message-State: AOAM531oOBxMtGd9wEiLHZY+sULqDGrut+ykVjM+hbNfGtnpeYy5Efy5 G7Xgf/vshuO8+io4XRFB9JwdryobyeH/BQ== X-Google-Smtp-Source: ABdhPJxdmJsO9mzQ4buVyBsTFCLgib9BGxdi9cpiqDlBCKPdTYMS6YRMqxYuy0IbdAmKvi5eMwQs2Q== X-Received: by 2002:a37:4783:: with SMTP id u125mr10996796qka.186.1614975370344; Fri, 05 Mar 2021 12:16:10 -0800 (PST) Received: from localhost.localdomain ([177.194.48.209]) by smtp.googlemail.com with ESMTPSA id c5sm2526145qkl.21.2021.03.05.12.16.09 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Mar 2021 12:16:10 -0800 (PST) To: libc-alpha@sourceware.org Subject: [PATCH 39/52] posix: Add glob64 with 64 bit time_t support Date: Fri, 5 Mar 2021 17:15:05 -0300 Message-Id: <20210305201518.798584-40-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210305201518.798584-1-adhemerval.zanella@linaro.org> References: <20210305201518.798584-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Adhemerval Zanella via Libc-alpha From: Adhemerval Zanella Netto Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" 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. --- include/glob.h | 28 +++++++++++ posix/Makefile | 3 +- 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, 306 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 + 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 + +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 8e31c721e1..aba66efde8 100644 --- a/posix/Makefile +++ b/posix/Makefile @@ -66,7 +66,8 @@ routines := \ posix_madvise \ get_child_max sched_cpucount sched_cpualloc sched_cpufree \ streams-compat \ - shm-directory + 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 #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; 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 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 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 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 diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions index 45d31a46bc..4df0ece1f3 100644 --- a/sysdeps/unix/sysv/linux/Versions +++ b/sysdeps/unix/sysv/linux/Versions @@ -187,6 +187,8 @@ libc { __select64; __utimes64; # posix + __glob64_time64; + __globfree64_time64; __nanosleep64; __pselec64; __wait3_time64; diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist index d63e0dee75..9952c6936f 100644 --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist @@ -173,6 +173,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 1a0f0d1312..bf9c48fbcd 100644 --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist @@ -170,6 +170,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 120a3fc1ce..d0494fcd74 100644 --- a/sysdeps/unix/sysv/linux/csky/libc.abilist +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist @@ -2133,6 +2133,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 + #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 +#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) +#endif diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist index 77c7d2faf3..33f9f0ba5c 100644 --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist @@ -2092,6 +2092,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 7d1a9691e7..44e3e4fcb1 100644 --- a/sysdeps/unix/sysv/linux/i386/libc.abilist +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist @@ -2259,6 +2259,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/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist index da00a3d3c3..84a4a1d60b 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist @@ -174,6 +174,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 3e0f00210f..eb290d2000 100644 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist @@ -2204,6 +2204,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 9bed39a8e8..a341137565 100644 --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist @@ -2184,6 +2184,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 872321bbab..956291e8c0 100644 --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist @@ -2181,6 +2181,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 77dcc8ab7d..ea5993d651 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist @@ -2175,6 +2175,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 c41f85ce01..e167afac72 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist @@ -2173,6 +2173,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 4208f9df82..0ebfc36f9b 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist @@ -2181,6 +2181,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 ff0bb57cb6..06febde125 100644 --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist @@ -2222,6 +2222,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 57f1fe012a..e292d5afdd 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist @@ -2231,6 +2231,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 6c9fa9c098..332bb8a3bc 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist @@ -2264,6 +2264,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 d357619c55..e2c81ee4fc 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist @@ -2229,6 +2229,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 725952a763..adc5305c41 100644 --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist @@ -2099,6 +2099,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 7f07b96287..4757127f97 100644 --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist @@ -2096,6 +2096,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 3b7af990d4..25429967b0 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist @@ -2220,6 +2220,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