aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Baker <mbm@openwrt.org>2006-05-12 18:47:57 +0000
committerMike Baker <mbm@openwrt.org>2006-05-12 18:47:57 +0000
commit7b37cc4da9c275661854482bb61046d4d7a8435f (patch)
treec24048835b8e4a851cbdad64c9f1e8a049acd34c
parent39009d6886361eb88791da2f0ecaed6271f6feb5 (diff)
downloadupstream-7b37cc4da9c275661854482bb61046d4d7a8435f.tar.gz
upstream-7b37cc4da9c275661854482bb61046d4d7a8435f.tar.bz2
upstream-7b37cc4da9c275661854482bb61046d4d7a8435f.zip
add wildcard support to menuconfig (again)
git-svn-id: svn://svn.openwrt.org/openwrt/branches/buildroot-ng/openwrt@3768 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rw-r--r--scripts/config/lex.zconf.c_shipped65
-rw-r--r--scripts/config/zconf.l65
2 files changed, 86 insertions, 44 deletions
diff --git a/scripts/config/lex.zconf.c_shipped b/scripts/config/lex.zconf.c_shipped
index 2712384f6e..5e01ee5318 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)
diff --git a/scripts/config/zconf.l b/scripts/config/zconf.l
index cfa46077c6..7acb60f8e7 100644
--- a/scripts/config/zconf.l
+++ b/scripts/config/zconf.l
@@ -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,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 void zconf_endfile(void)