| From 193f1e81edd6b1b56b0eb0ff8aa4b41c7b4257b4 Mon Sep 17 00:00:00 2001 | 
| From: Paul Eggert <eggert@cs.ucla.edu> | 
| Date: Sun, 24 Sep 2017 09:12:58 -0400 | 
| Subject: [PATCH] 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. | 
|   | 
| Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com> | 
| (from upstream commit 193f1e81edd6b1b56b0eb0ff8aa4b41c7b4257b4) | 
| --- | 
|  dir.c | 29 +++++++++++++++++++++++++++-- | 
|  1 file changed, 27 insertions(+), 2 deletions(-) | 
|   | 
| diff --git a/dir.c b/dir.c | 
| index adbb8a9..c343e4c 100644 | 
| --- a/dir.c | 
| +++ b/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 | 
| --  | 
| 2.21.0 |