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