posix: Consolidate Linux glob implementation

This patch consolidates the glob implementation.  The main changes are:

  * On Linux all implementation now uses the default one at
    sysdeps/unix/sysv/linux/glob{free}{64}.c with the exception
    of alpha (which requires specific versioning) and s390-32 (which
    different than other 32 bits ports it does not add a compat one
    symbol for 2.1 version).

  * The default implementation uses XSTAT_IS_XSTAT64 to define whether
    both glob{free} and glob{free}64 should be different implementations.
    For archictures that define XSTAT_IS_XSTAT64, glob{free} is an alias
    to glob{free}64.

  * Move i386 olddirent.h header to Linux default directory, since it is
    the only header with this name and it is shared among different
    architectures (and used on compat glob symbol as well).

Checked on x86_64-linux-gnu and on a build using build-many-glibcs.py
for all major architectures.

	* sysdeps/unix/sysv/linux/arm/glob64.c: Remove file.
	* sysdeps/unix/sysv/linux/i386/glob64.c: Likewise.
	* sysdeps/unix/sysv/linux/m68k/glob64.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n64/glob64.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n64/globfree64.c: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/glob64.c: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/glob64.c: Likewise.
	* sysdeps/unix/sysv/linux/wordsize-64/glob64.c: Likewise.
	* sysdeps/unix/sysv/linux/wordsize-64/globfree64.c: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/glob.c: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/globfree.c: Likewise.
	* sysdeps/wordsize-64/glob.c: Likewise.
	* sysdeps/wordsize-64/glob64.c: Likewise.
	* sysdeps/wordsize-64/globfree64.c: Likewise.
	* sysdeps/unix/sysv/linux/glob.c: New file.
	* sysdeps/unix/sysv/linux/glob64.c: Likewise.
	* sysdeps/unix/sysv/linux/globfree.c: Likewise.
	* sysdeps/unix/sysv/linux/globfree64.c: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/glob64.c: Likewise.
	* sysdeps/unix/sysv/linux/oldglob.c [SHLIB_COMPAT]: Also
	adds !GLOB_NO_OLD_VERSION as an extra condition.
	* sysdeps/unix/sysv/linux/i386/alphasort64.c: Include olddirent.h
	using relative path instead of absolute one.
	* sysdeps/unix/sysv/linux/i386/getdents64.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/readdir64.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/readdir64_r.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/versionsort64.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/olddirent.h: Move to ...
	* sysdeps/unix/sysv/linux//olddirent.h: ... here.
This commit is contained in:
Adhemerval Zanella 2017-09-04 18:07:03 -03:00
parent ffca890177
commit 116f1c64d8
27 changed files with 160 additions and 48 deletions

View File

@ -1,5 +1,36 @@
2017-09-08 Adhemerval Zanella <adhemerval.zanella@linaro.org>
* sysdeps/unix/sysv/linux/arm/glob64.c: Remove file.
* sysdeps/unix/sysv/linux/i386/glob64.c: Likewise.
* sysdeps/unix/sysv/linux/m68k/glob64.c: Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/n64/glob64.c: Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/n64/globfree64.c: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/glob64.c: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc32/glob64.c: Likewise.
* sysdeps/unix/sysv/linux/wordsize-64/glob64.c: Likewise.
* sysdeps/unix/sysv/linux/wordsize-64/globfree64.c: Likewise.
* sysdeps/unix/sysv/linux/x86_64/x32/glob.c: Likewise.
* sysdeps/unix/sysv/linux/x86_64/x32/globfree.c: Likewise.
* sysdeps/wordsize-64/glob.c: Likewise.
* sysdeps/wordsize-64/glob64.c: Likewise.
* sysdeps/wordsize-64/globfree.c: Likewise.
* sysdeps/wordsize-64/globfree64.c: Likewise.
* sysdeps/unix/sysv/linux/glob.c: New file.
* sysdeps/unix/sysv/linux/glob64.c: Likewise.
* sysdeps/unix/sysv/linux/globfree.c: Likewise.
* sysdeps/unix/sysv/linux/globfree64.c: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/glob64.c: Likewise.
* sysdeps/unix/sysv/linux/oldglob.c [SHLIB_COMPAT]: Also
adds !GLOB_NO_OLD_VERSION as an extra condition.
* sysdeps/unix/sysv/linux/i386/alphasort64.c: Include olddirent.h
using relative path instead of absolute one.
* sysdeps/unix/sysv/linux/i386/getdents64.c: Likewise.
* sysdeps/unix/sysv/linux/i386/readdir64.c: Likewise.
* sysdeps/unix/sysv/linux/i386/readdir64_r.c: Likewise.
* sysdeps/unix/sysv/linux/i386/versionsort64.c: Likewise.
* sysdeps/unix/sysv/linux/i386/olddirent.h: Move to ...
* sysdeps/unix/sysv/linux//olddirent.h: ... here.
[BZ #1062]
* posix/glob.c (GET_LOGIN_NAME_MAX): Remove.
(glob): Use the same scratch buffer for both getlogin_r and

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/glob64.c>

View File

@ -0,0 +1,28 @@
/* Find pathnames matching a pattern. Linux version.
Copyright (C) 2017 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
<http://www.gnu.org/licenses/>. */
#include <sys/stat.h>
#include <kernel_stat.h>
#define glob64 __no_glob64_decl
#include <posix/glob.c>
#undef glob64
#if XSTAT_IS_XSTAT64
weak_alias (glob, glob64)
#endif

View File

@ -1,5 +1,5 @@
/* Two glob variants with 64-bit support, for dirent64 and __olddirent64.
Copyright (C) 1998-2017 Free Software Foundation, Inc.
/* Find pathnames matching a pattern. Linux version.
Copyright (C) 2017 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
@ -16,10 +16,13 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <dirent.h>
#include <glob.h>
#include <sys/stat.h>
#include <shlib-compat.h>
#include <kernel_stat.h>
#if !XSTAT_IS_XSTAT64
# include <glob.h>
# include <dirent.h>
# include <sys/stat.h>
# define dirent dirent64
# define __readdir(dirp) __readdir64 (dirp)
@ -31,12 +34,18 @@
# undef stat
# define stat stat64
#undef __stat
#define __stat(file, buf) __xstat64 (_STAT_VER, file, buf)
# define COMPILE_GLOB64 1
# include <posix/glob.c>
# include "shlib-compat.h"
# ifdef GLOB_NO_OLD_VERSION
strong_alias (__glob64, glob64)
libc_hidden_def (glob64)
# else
versioned_symbol (libc, __glob64, glob64, GLIBC_2_2);
libc_hidden_ver (__glob64, glob64)
# endif
#endif /* XSTAT_IS_XSTAT64 */

View File

@ -0,0 +1,30 @@
/* Frees the dynamically allocated storage from an earlier call to glob.
Linux version.
Copyright (C) 2017 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
<http://www.gnu.org/licenses/>. */
#include <sys/stat.h>
#include <kernel_stat.h>
#define globfree64 __no_globfree64_decl
#include <posix/globfree.c>
#undef globfree64
#if XSTAT_IS_XSTAT64
weak_alias (globfree, globfree64)
libc_hidden_ver (globfree, globfree64)
#endif

View File

@ -0,0 +1,36 @@
/* Frees the dynamically allocated storage from an earlier call to glob.
Linux version.
Copyright (C) 2017 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
<http://www.gnu.org/licenses/>. */
#include <sys/stat.h>
#include <kernel_stat.h>
#if !XSTAT_IS_XSTAT64
# include <glob.h>
# define glob_t glob64_t
# define globfree(pglob) globfree64 (pglob)
# undef stat
# define stat stat64
# include <posix/globfree.c>
libc_hidden_def (globfree64)
#endif

View File

@ -30,7 +30,7 @@ versioned_symbol (libc, __alphasort64, alphasort64, GLIBC_2_2);
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
#include <sysdeps/unix/sysv/linux/i386/olddirent.h>
#include <olddirent.h>
int
__old_alphasort64 (const struct __old_dirent64 **a,

View File

@ -28,7 +28,7 @@
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
#include <sysdeps/unix/sysv/linux/i386/olddirent.h>
#include <olddirent.h>
#define __GETDENTS __old_getdents64
#define DIRENT_TYPE struct __old_dirent64

View File

@ -31,7 +31,7 @@ versioned_symbol (libc, __readdir64, readdir64, GLIBC_2_2);
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
#include <sysdeps/unix/sysv/linux/i386/olddirent.h>
#include <olddirent.h>
#define __READDIR attribute_compat_text_section __old_readdir64
#define __GETDENTS __old_getdents64

View File

@ -31,7 +31,7 @@ versioned_symbol (libc, __readdir64_r, readdir64_r, GLIBC_2_2);
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
#include <sysdeps/unix/sysv/linux/i386/olddirent.h>
#include <olddirent.h>
#define __READDIR_R attribute_compat_text_section __old_readdir64_r
#define __GETDENTS __old_getdents64

View File

@ -30,7 +30,7 @@ versioned_symbol (libc, __versionsort64, versionsort64, GLIBC_2_2);
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
#include <sysdeps/unix/sysv/linux/i386/olddirent.h>
#include <olddirent.h>
int
__old_versionsort64 (const struct __old_dirent64 **a,

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/glob64.c>

View File

@ -1 +0,0 @@
/* glob64 is in glob.c */

View File

@ -1 +0,0 @@
/* glob64 is in globfree64.c */

View File

@ -1,12 +1,13 @@
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) \
&& !defined(GLOB_NO_OLD_VERSION)
#include <dirent.h>
#include <glob.h>
#include <sys/stat.h>
#include <sysdeps/unix/sysv/linux/i386/olddirent.h>
#include <olddirent.h>
int __old_glob64 (const char *__pattern, int __flags,
int (*__errfunc) (const char *, int),

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/glob64.c>

View File

@ -0,0 +1,2 @@
#define GLOB_NO_OLD_VERSION
#include <sysdeps/unix/sysv/linux/glob64.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/glob64.c>

View File

@ -1,2 +0,0 @@
/* This file is here so sysdeps/gnu/glob64.c doesn't take precedence. */
#include <sysdeps/wordsize-64/glob64.c>

View File

@ -1,2 +0,0 @@
/* This file is here so sysdeps/gnu/glob64.c doesn't take precedence. */
#include <sysdeps/wordsize-64/globfree64.c>

View File

@ -1 +0,0 @@
#include <sysdeps/wordsize-64/glob.c>

View File

@ -1 +0,0 @@
#include <sysdeps/wordsize-64/globfree.c>

View File

@ -1,6 +0,0 @@
#define glob64 __no_glob64_decl
#define globfree64 __no_globfree64_decl
#include <posix/glob.c>
#undef glob64
#undef globfree64
weak_alias (glob, glob64)

View File

@ -1 +0,0 @@
/* glob64 is in glob.c */

View File

@ -1,5 +0,0 @@
#define globfree64 __no_globfree64_decl
#include <posix/globfree.c>
#undef globfree64
weak_alias (globfree, globfree64)
libc_hidden_ver (globfree, globfree64)

View File

@ -1 +0,0 @@
/* globfree64 is in globfree.c */