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:
Paul Eggert 2017-09-24 09:12:58 -04:00 committed by Paul Smith
parent d8728efc80
commit 193f1e81ed

29
dir.c
View File

@ -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