Loading Documentation/kbuild/kconfig.txt +3 −5 Original line number Original line Diff line number Diff line Loading @@ -175,11 +175,9 @@ Searching in menuconfig: /^hotplug /^hotplug When searching, symbols are sorted thus: When searching, symbols are sorted thus: - exact match first: an exact match is when the search matches - first, exact matches, sorted alphabetically (an exact match the complete symbol name; is when the search matches the complete symbol name); - alphabetical order: when two symbols do not match exactly, - then, other matches, sorted alphabetically. they are sorted in alphabetical order (in the user's current locale). For example: ^ATH.K matches: For example: ^ATH.K matches: ATH5K ATH9K ATH5K_AHB ATH5K_DEBUG [...] ATH6KL ATH6KL_DEBUG ATH5K ATH9K ATH5K_AHB ATH5K_DEBUG [...] ATH6KL ATH6KL_DEBUG [...] ATH9K_AHB ATH9K_BTCOEX_SUPPORT ATH9K_COMMON [...] [...] ATH9K_AHB ATH9K_BTCOEX_SUPPORT ATH9K_COMMON [...] Loading scripts/kconfig/mconf.c +2 −2 Original line number Original line Diff line number Diff line Loading @@ -401,8 +401,8 @@ static void search_conf(void) struct subtitle_part stpart; struct subtitle_part stpart; title = str_new(); title = str_new(); str_printf( &title, _("Enter %s (sub)string or regexp to search for " str_printf( &title, _("Enter (sub)string or regexp to search for " "(with or without \"%s\")"), CONFIG_, CONFIG_); "(with or without \"%s\")"), CONFIG_); again: again: dialog_clear(); dialog_clear(); Loading scripts/kconfig/nconf.c +2 −2 Original line number Original line Diff line number Diff line Loading @@ -695,8 +695,8 @@ static void search_conf(void) int dres; int dres; title = str_new(); title = str_new(); str_printf( &title, _("Enter %s (sub)string or regexp to search for " str_printf( &title, _("Enter (sub)string or regexp to search for " "(with or without \"%s\")"), CONFIG_, CONFIG_); "(with or without \"%s\")"), CONFIG_); again: again: dres = dialog_inputbox(main_window, dres = dialog_inputbox(main_window, Loading scripts/kconfig/symbol.c +20 −29 Original line number Original line Diff line number Diff line Loading @@ -965,9 +965,9 @@ struct sym_match { */ */ static int sym_rel_comp(const void *sym1, const void *sym2) static int sym_rel_comp(const void *sym1, const void *sym2) { { struct sym_match *s1 = *(struct sym_match **)sym1; const struct sym_match *s1 = sym1; struct sym_match *s2 = *(struct sym_match **)sym2; const struct sym_match *s2 = sym2; int l1, l2; int exact1, exact2; /* Exact match: /* Exact match: * - if matched length on symbol s1 is the length of that symbol, * - if matched length on symbol s1 is the length of that symbol, Loading @@ -978,11 +978,11 @@ static int sym_rel_comp( const void *sym1, const void *sym2 ) * exactly; if this is the case, we can't decide which comes first, * exactly; if this is the case, we can't decide which comes first, * and we fallback to sorting alphabetically. * and we fallback to sorting alphabetically. */ */ l1 = s1->eo - s1->so; exact1 = (s1->eo - s1->so) == strlen(s1->sym->name); l2 = s2->eo - s2->so; exact2 = (s2->eo - s2->so) == strlen(s2->sym->name); if (l1 == strlen(s1->sym->name) && l2 != strlen(s2->sym->name)) if (exact1 && !exact2) return -1; return -1; if (l1 != strlen(s1->sym->name) && l2 == strlen(s2->sym->name)) if (!exact1 && exact2) return 1; return 1; /* As a fallback, sort symbols alphabetically */ /* As a fallback, sort symbols alphabetically */ Loading @@ -992,7 +992,7 @@ static int sym_rel_comp( const void *sym1, const void *sym2 ) struct symbol **sym_re_search(const char *pattern) struct symbol **sym_re_search(const char *pattern) { { struct symbol *sym, **sym_arr = NULL; struct symbol *sym, **sym_arr = NULL; struct sym_match **sym_match_arr = NULL; struct sym_match *sym_match_arr = NULL; int i, cnt, size; int i, cnt, size; regex_t re; regex_t re; regmatch_t match[1]; regmatch_t match[1]; Loading @@ -1005,47 +1005,38 @@ struct symbol **sym_re_search(const char *pattern) return NULL; return NULL; for_all_symbols(i, sym) { for_all_symbols(i, sym) { struct sym_match *tmp_sym_match; if (sym->flags & SYMBOL_CONST || !sym->name) if (sym->flags & SYMBOL_CONST || !sym->name) continue; continue; if (regexec(&re, sym->name, 1, match, 0)) if (regexec(&re, sym->name, 1, match, 0)) continue; continue; if (cnt + 1 >= size) { if (cnt >= size) { void *tmp; void *tmp; size += 16; size += 16; tmp = realloc(sym_match_arr, size * sizeof(struct sym_match *)); tmp = realloc(sym_match_arr, size * sizeof(struct sym_match)); if (!tmp) { if (!tmp) goto sym_re_search_free; goto sym_re_search_free; } sym_match_arr = tmp; sym_match_arr = tmp; } } sym_calc_value(sym); sym_calc_value(sym); tmp_sym_match = (struct sym_match*)malloc(sizeof(struct sym_match)); /* As regexec returned 0, we know we have a match, so if (!tmp_sym_match) goto sym_re_search_free; tmp_sym_match->sym = sym; /* As regexec return 0, we know we have a match, so * we can use match[0].rm_[se]o without further checks * we can use match[0].rm_[se]o without further checks */ */ tmp_sym_match->so = match[0].rm_so; sym_match_arr[cnt].so = match[0].rm_so; tmp_sym_match->eo = match[0].rm_eo; sym_match_arr[cnt].eo = match[0].rm_eo; sym_match_arr[cnt++] = tmp_sym_match; sym_match_arr[cnt++].sym = sym; } } if (sym_match_arr) { if (sym_match_arr) { qsort(sym_match_arr, cnt, sizeof(struct sym_match*), sym_rel_comp); qsort(sym_match_arr, cnt, sizeof(struct sym_match), sym_rel_comp); sym_arr = malloc((cnt+1) * sizeof(struct symbol)); sym_arr = malloc((cnt+1) * sizeof(struct symbol)); if (!sym_arr) if (!sym_arr) goto sym_re_search_free; goto sym_re_search_free; for (i = 0; i < cnt; i++) for (i = 0; i < cnt; i++) sym_arr[i] = sym_match_arr[i]->sym; sym_arr[i] = sym_match_arr[i].sym; sym_arr[cnt] = NULL; sym_arr[cnt] = NULL; } } sym_re_search_free: sym_re_search_free: if (sym_match_arr) { /* sym_match_arr can be NULL if no match, but free(NULL) is OK */ for (i = 0; i < cnt; i++) free(sym_match_arr[i]); free(sym_match_arr); free(sym_match_arr); } regfree(&re); regfree(&re); return sym_arr; return sym_arr; Loading Loading
Documentation/kbuild/kconfig.txt +3 −5 Original line number Original line Diff line number Diff line Loading @@ -175,11 +175,9 @@ Searching in menuconfig: /^hotplug /^hotplug When searching, symbols are sorted thus: When searching, symbols are sorted thus: - exact match first: an exact match is when the search matches - first, exact matches, sorted alphabetically (an exact match the complete symbol name; is when the search matches the complete symbol name); - alphabetical order: when two symbols do not match exactly, - then, other matches, sorted alphabetically. they are sorted in alphabetical order (in the user's current locale). For example: ^ATH.K matches: For example: ^ATH.K matches: ATH5K ATH9K ATH5K_AHB ATH5K_DEBUG [...] ATH6KL ATH6KL_DEBUG ATH5K ATH9K ATH5K_AHB ATH5K_DEBUG [...] ATH6KL ATH6KL_DEBUG [...] ATH9K_AHB ATH9K_BTCOEX_SUPPORT ATH9K_COMMON [...] [...] ATH9K_AHB ATH9K_BTCOEX_SUPPORT ATH9K_COMMON [...] Loading
scripts/kconfig/mconf.c +2 −2 Original line number Original line Diff line number Diff line Loading @@ -401,8 +401,8 @@ static void search_conf(void) struct subtitle_part stpart; struct subtitle_part stpart; title = str_new(); title = str_new(); str_printf( &title, _("Enter %s (sub)string or regexp to search for " str_printf( &title, _("Enter (sub)string or regexp to search for " "(with or without \"%s\")"), CONFIG_, CONFIG_); "(with or without \"%s\")"), CONFIG_); again: again: dialog_clear(); dialog_clear(); Loading
scripts/kconfig/nconf.c +2 −2 Original line number Original line Diff line number Diff line Loading @@ -695,8 +695,8 @@ static void search_conf(void) int dres; int dres; title = str_new(); title = str_new(); str_printf( &title, _("Enter %s (sub)string or regexp to search for " str_printf( &title, _("Enter (sub)string or regexp to search for " "(with or without \"%s\")"), CONFIG_, CONFIG_); "(with or without \"%s\")"), CONFIG_); again: again: dres = dialog_inputbox(main_window, dres = dialog_inputbox(main_window, Loading
scripts/kconfig/symbol.c +20 −29 Original line number Original line Diff line number Diff line Loading @@ -965,9 +965,9 @@ struct sym_match { */ */ static int sym_rel_comp(const void *sym1, const void *sym2) static int sym_rel_comp(const void *sym1, const void *sym2) { { struct sym_match *s1 = *(struct sym_match **)sym1; const struct sym_match *s1 = sym1; struct sym_match *s2 = *(struct sym_match **)sym2; const struct sym_match *s2 = sym2; int l1, l2; int exact1, exact2; /* Exact match: /* Exact match: * - if matched length on symbol s1 is the length of that symbol, * - if matched length on symbol s1 is the length of that symbol, Loading @@ -978,11 +978,11 @@ static int sym_rel_comp( const void *sym1, const void *sym2 ) * exactly; if this is the case, we can't decide which comes first, * exactly; if this is the case, we can't decide which comes first, * and we fallback to sorting alphabetically. * and we fallback to sorting alphabetically. */ */ l1 = s1->eo - s1->so; exact1 = (s1->eo - s1->so) == strlen(s1->sym->name); l2 = s2->eo - s2->so; exact2 = (s2->eo - s2->so) == strlen(s2->sym->name); if (l1 == strlen(s1->sym->name) && l2 != strlen(s2->sym->name)) if (exact1 && !exact2) return -1; return -1; if (l1 != strlen(s1->sym->name) && l2 == strlen(s2->sym->name)) if (!exact1 && exact2) return 1; return 1; /* As a fallback, sort symbols alphabetically */ /* As a fallback, sort symbols alphabetically */ Loading @@ -992,7 +992,7 @@ static int sym_rel_comp( const void *sym1, const void *sym2 ) struct symbol **sym_re_search(const char *pattern) struct symbol **sym_re_search(const char *pattern) { { struct symbol *sym, **sym_arr = NULL; struct symbol *sym, **sym_arr = NULL; struct sym_match **sym_match_arr = NULL; struct sym_match *sym_match_arr = NULL; int i, cnt, size; int i, cnt, size; regex_t re; regex_t re; regmatch_t match[1]; regmatch_t match[1]; Loading @@ -1005,47 +1005,38 @@ struct symbol **sym_re_search(const char *pattern) return NULL; return NULL; for_all_symbols(i, sym) { for_all_symbols(i, sym) { struct sym_match *tmp_sym_match; if (sym->flags & SYMBOL_CONST || !sym->name) if (sym->flags & SYMBOL_CONST || !sym->name) continue; continue; if (regexec(&re, sym->name, 1, match, 0)) if (regexec(&re, sym->name, 1, match, 0)) continue; continue; if (cnt + 1 >= size) { if (cnt >= size) { void *tmp; void *tmp; size += 16; size += 16; tmp = realloc(sym_match_arr, size * sizeof(struct sym_match *)); tmp = realloc(sym_match_arr, size * sizeof(struct sym_match)); if (!tmp) { if (!tmp) goto sym_re_search_free; goto sym_re_search_free; } sym_match_arr = tmp; sym_match_arr = tmp; } } sym_calc_value(sym); sym_calc_value(sym); tmp_sym_match = (struct sym_match*)malloc(sizeof(struct sym_match)); /* As regexec returned 0, we know we have a match, so if (!tmp_sym_match) goto sym_re_search_free; tmp_sym_match->sym = sym; /* As regexec return 0, we know we have a match, so * we can use match[0].rm_[se]o without further checks * we can use match[0].rm_[se]o without further checks */ */ tmp_sym_match->so = match[0].rm_so; sym_match_arr[cnt].so = match[0].rm_so; tmp_sym_match->eo = match[0].rm_eo; sym_match_arr[cnt].eo = match[0].rm_eo; sym_match_arr[cnt++] = tmp_sym_match; sym_match_arr[cnt++].sym = sym; } } if (sym_match_arr) { if (sym_match_arr) { qsort(sym_match_arr, cnt, sizeof(struct sym_match*), sym_rel_comp); qsort(sym_match_arr, cnt, sizeof(struct sym_match), sym_rel_comp); sym_arr = malloc((cnt+1) * sizeof(struct symbol)); sym_arr = malloc((cnt+1) * sizeof(struct symbol)); if (!sym_arr) if (!sym_arr) goto sym_re_search_free; goto sym_re_search_free; for (i = 0; i < cnt; i++) for (i = 0; i < cnt; i++) sym_arr[i] = sym_match_arr[i]->sym; sym_arr[i] = sym_match_arr[i].sym; sym_arr[cnt] = NULL; sym_arr[cnt] = NULL; } } sym_re_search_free: sym_re_search_free: if (sym_match_arr) { /* sym_match_arr can be NULL if no match, but free(NULL) is OK */ for (i = 0; i < cnt; i++) free(sym_match_arr[i]); free(sym_match_arr); free(sym_match_arr); } regfree(&re); regfree(&re); return sym_arr; return sym_arr; Loading