X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/5c472fc895c32a189d574b338057164e95430825..4c820361977bd61279d8a3d3cd34964e8e56accb:/scripts/config/lex.zconf.c_shipped

diff --git a/scripts/config/lex.zconf.c_shipped b/scripts/config/lex.zconf.c_shipped
index 2712384f6..5e01ee531 100644
--- a/scripts/config/lex.zconf.c_shipped
+++ b/scripts/config/lex.zconf.c_shipped
@@ -20,6 +20,7 @@
 #include <string.h>
 #include <errno.h>
 #include <stdlib.h>
+#include <glob.h>
 
 /* end standard C headers. */
 
@@ -2259,32 +2260,52 @@ void zconf_initscan(const char *name)
 
 void zconf_nextfile(const char *name)
 {
-	struct file *file = file_lookup(name);
-	struct buffer *buf = malloc(sizeof(*buf));
-	memset(buf, 0, sizeof(*buf));
-
-	current_buf->state = YY_CURRENT_BUFFER;
-	zconfin = zconf_fopen(name);
-	if (!zconfin) {
-		printf("%s:%d: can't open file \"%s\"\n", zconf_curname(), zconf_lineno(), name);
+	size_t i;
+	int retval;
+	glob_t files;
+	char *filename;
+	struct file *file;
+	struct buffer *buf;
+
+	retval = glob(name, GLOB_ERR | GLOB_MARK, NULL, &files);
+	if (retval == GLOB_NOSPACE || retval == GLOB_ABORTED || retval == GLOB_NOMATCH) {
+		printf("%s:%d: glob failed: %s \"%s\"\n", zconf_curname(), zconf_lineno(),
+			retval == GLOB_NOSPACE ? "failed to allocate memory" :
+				retval == GLOB_ABORTED ? "read error" : "no match",
+			name);
 		exit(1);
 	}
-	zconf_switch_to_buffer(zconf_create_buffer(zconfin,YY_BUF_SIZE));
-	buf->parent = current_buf;
-	current_buf = buf;
 
-	if (file->flags & FILE_BUSY) {
-		printf("recursive scan (%s)?\n", name);
-		exit(1);
-	}
-	if (file->flags & FILE_SCANNED) {
-		printf("file %s already scanned?\n", name);
-		exit(1);
+	for (i = files.gl_pathc-1; i != (size_t)-1; --i) {
+		filename = files.gl_pathv[i];
+
+		file = file_lookup(filename);
+                buf = malloc(sizeof(*buf));
+		memset(buf, 0, sizeof(*buf));
+		current_buf->state = YY_CURRENT_BUFFER;
+		zconfin = zconf_fopen(filename);
+		if (!zconfin) {
+			printf("%s:%d: can't open file \"%s\"\n",
+				zconf_curname(), zconf_lineno(), filename);
+			exit(1);
+		}
+		zconf_switch_to_buffer(zconf_create_buffer(zconfin,YY_BUF_SIZE));
+		buf->parent = current_buf;
+		current_buf = buf;
+
+		if (file->flags & FILE_BUSY) {
+			printf("recursive scan (%s)?\n", filename);
+			exit(1);
+		}
+		if (file->flags & FILE_SCANNED) {
+			printf("file %s already scanned?\n", filename);
+			exit(1);
+		}
+		file->flags |= FILE_BUSY;
+		file->lineno = 1;
+		file->parent = current_file;
+		current_file = file;
 	}
-	file->flags |= FILE_BUSY;
-	file->lineno = 1;
-	file->parent = current_file;
-	current_file = file;
 }
 
 static void zconf_endfile(void)