mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-01 17:30:07 +00:00
116f1c64d8
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.
44 lines
1.0 KiB
C
44 lines
1.0 KiB
C
#include <shlib-compat.h>
|
|
|
|
#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 <olddirent.h>
|
|
|
|
int __old_glob64 (const char *__pattern, int __flags,
|
|
int (*__errfunc) (const char *, int),
|
|
glob64_t *__pglob);
|
|
libc_hidden_proto (__old_glob64);
|
|
|
|
#define dirent __old_dirent64
|
|
#define GL_READDIR(pglob, stream) \
|
|
((struct __old_dirent64 *) (pglob)->gl_readdir (stream))
|
|
#undef __readdir
|
|
#define __readdir(dirp) __old_readdir64 (dirp)
|
|
|
|
#define glob_t glob64_t
|
|
#define glob(pattern, flags, errfunc, pglob) \
|
|
__old_glob64 (pattern, flags, errfunc, pglob)
|
|
#define globfree(pglob) globfree64(pglob)
|
|
|
|
#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) __xstat64 (_STAT_VER, file, buf)
|
|
|
|
#define GLOB_ATTRIBUTE attribute_compat_text_section
|
|
|
|
#include <posix/glob.c>
|
|
|
|
libc_hidden_def (__old_glob64);
|
|
|
|
compat_symbol (libc, __old_glob64, glob64, GLIBC_2_1);
|
|
#endif
|