[include] netfilter: workaround a userspace/kernel mismatch on Linux 2.6.35 and later
[openwrt.git] / scripts / config / zconf.l
index cfa4607..71107a5 100644 (file)
@@ -12,6 +12,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <glob.h>
 
 #define LKC_DIRECT_LINK
 #include "lkc.h"
@@ -293,32 +294,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;
-       yyin = zconf_fopen(name);
-       if (!yyin) {
-               printf("%s:%d: can't open file \"%s\"\n", zconf_curname(), zconf_lineno(), name);
-               exit(1);
-       }
-       yy_switch_to_buffer(yy_create_buffer(yyin, 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)
This page took 0.026481 seconds and 4 git commands to generate.