From f66a762344d77b8e4a4d50e68896638a234dc631 Mon Sep 17 00:00:00 2001 From: Peter Kjellerstedt Date: Mon, 18 Apr 2005 15:59:49 +0000 Subject: Updated to match Linux 2.6.11. --- extra/config/symbol.c | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) (limited to 'extra/config/symbol.c') diff --git a/extra/config/symbol.c b/extra/config/symbol.c index a9fae9c13..ea629728a 100644 --- a/extra/config/symbol.c +++ b/extra/config/symbol.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #define LKC_DIRECT_LINK @@ -414,7 +415,7 @@ tristate sym_toggle_tristate_value(struct symbol *sym) bool sym_string_valid(struct symbol *sym, const char *str) { - char ch; + signed char ch; switch (sym->type) { case S_STRING: @@ -649,6 +650,43 @@ struct symbol *sym_find(const char *name) return symbol; } +struct symbol **sym_re_search(const char *pattern) +{ + struct symbol *sym, **sym_arr = NULL; + int i, cnt, size; + regex_t re; + + cnt = size = 0; + /* Skip if empty */ + if (strlen(pattern) == 0) + return NULL; + if (regcomp(&re, pattern, REG_EXTENDED|REG_NOSUB|REG_ICASE)) + return NULL; + + for_all_symbols(i, sym) { + if (sym->flags & SYMBOL_CONST || !sym->name) + continue; + if (regexec(&re, sym->name, 0, NULL, 0)) + continue; + if (cnt + 1 >= size) { + void *tmp = sym_arr; + size += 16; + sym_arr = realloc(sym_arr, size * sizeof(struct symbol *)); + if (!sym_arr) { + free(tmp); + return NULL; + } + } + sym_arr[cnt++] = sym; + } + if (sym_arr) + sym_arr[cnt] = NULL; + regfree(&re); + + return sym_arr; +} + + struct symbol *sym_check_deps(struct symbol *sym); static struct symbol *sym_check_expr_deps(struct expr *e) -- cgit v1.2.3