mirror of
https://github.com/mirror/make.git
synced 2024-12-28 22:00:33 +08:00
glob: Do not assume glibc glob internals.
It has been proposed that glibc glob start using gl_lstat, which the API allows it to do. GNU 'make' should not get in the way of this. See: https://sourceware.org/ml/libc-alpha/2017-09/msg00409.html * dir.c (local_lstat): New function, like local_stat. (dir_setup_glob): Use it to initialize gl_lstat too, as the API requires.
This commit is contained in:
parent
d8728efc80
commit
193f1e81ed
29
dir.c
29
dir.c
@ -1299,15 +1299,40 @@ local_stat (const char *path, struct stat *buf)
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Similarly for lstat. */
|
||||
#if !defined(lstat) && !defined(WINDOWS32) || defined(VMS)
|
||||
# ifndef VMS
|
||||
# ifndef HAVE_SYS_STAT_H
|
||||
int lstat (const char *path, struct stat *sbuf);
|
||||
# endif
|
||||
# else
|
||||
/* We are done with the fake lstat. Go back to the real lstat */
|
||||
# ifdef lstat
|
||||
# undef lstat
|
||||
# endif
|
||||
# endif
|
||||
# define local_lstat lstat
|
||||
#elif defined(WINDOWS32)
|
||||
/* Windows doesn't support lstat(). */
|
||||
# define local_lstat local_stat
|
||||
#else
|
||||
static int
|
||||
local_lstat (const char *path, struct stat *buf)
|
||||
{
|
||||
int e;
|
||||
EINTRLOOP (e, lstat (path, buf));
|
||||
return e;
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
dir_setup_glob (glob_t *gl)
|
||||
{
|
||||
gl->gl_opendir = open_dirstream;
|
||||
gl->gl_readdir = read_dirstream;
|
||||
gl->gl_closedir = free;
|
||||
gl->gl_lstat = local_lstat;
|
||||
gl->gl_stat = local_stat;
|
||||
/* We don't bother setting gl_lstat, since glob never calls it.
|
||||
The slot is only there for compatibility with 4.4 BSD. */
|
||||
}
|
||||
|
||||
void
|
||||
|
Loading…
Reference in New Issue
Block a user