X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/5c472fc895c32a189d574b338057164e95430825..5e82366ac73be45fa284b6077c01cabb4fd11378:/scripts/config/lex.zconf.c_shipped?ds=sidebyside

diff --git a/scripts/config/lex.zconf.c_shipped b/scripts/config/lex.zconf.c_shipped
index 2712384f6..31637377a 100644
--- a/scripts/config/lex.zconf.c_shipped
+++ b/scripts/config/lex.zconf.c_shipped
@@ -747,6 +747,7 @@ char *zconftext;
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <glob.h>
 
 #define LKC_DIRECT_LINK
 #include "lkc.h"
@@ -2259,32 +2260,55 @@ 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));
+	size_t i;
+	int retval;
+	glob_t files;
+	char *filename;
+	struct file *file;
+	struct buffer *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);
-		exit(1);
-	}
-	zconf_switch_to_buffer(zconf_create_buffer(zconfin,YY_BUF_SIZE));
-	buf->parent = current_buf;
-	current_buf = buf;
+	retval = glob(name, GLOB_ERR | GLOB_MARK, NULL, &files);
+	if (retval == GLOB_NOMATCH)
+		return;
 
-	if (file->flags & FILE_BUSY) {
-		printf("recursive scan (%s)?\n", name);
+	if (retval == GLOB_NOSPACE || retval == GLOB_ABORTED) {
+		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);
 	}
-	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)