- Add the Do-not-assume-glibc-glob-internals patch to fix segfaults. - Update glob_interface_v2 patch to the patch directly from the make git repository instead of translating it. This gives better attributution to the original author. Change-Id: Ibc936fc00925a4ca2170a6f5dca7c2b8d8d62f02 Signed-off-by: Martin Roth <gaumless@gmail.com> Reviewed-on: https://review.coreboot.org/27591 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Reviewed-by: Patrick Georgi <pgeorgi@google.com>
		
			
				
	
	
		
			68 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| 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 53/78] 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.
 | |
| ---
 | |
|  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.18.0
 | |
| 
 |