add wildcard support to menuconfig
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sun, 17 Jul 2005 22:50:05 +0000 (22:50 +0000)
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sun, 17 Jul 2005 22:50:05 +0000 (22:50 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk/openwrt@1493 3c298f89-4303-0410-b956-a3cf2f4a3e73

package/config/lex.zconf.c_shipped
package/config/zconf.l

index b877bb6..83026df 100644 (file)
@@ -20,6 +20,7 @@
 #include <string.h>
 #include <errno.h>
 #include <stdlib.h>
+#include <glob.h>
 
 /* end standard C headers. */
 
@@ -3622,32 +3623,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 struct buffer *zconf_endfile(void)
index 55517b2..3a4947a 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"
@@ -301,32 +302,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;
-       yyin = zconf_fopen(name);
-       if (!yyin) {
-               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);
        }
-       yy_switch_to_buffer(yy_create_buffer(yyin, 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 struct buffer *zconf_endfile(void)