mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
kconfig: add a function to dump all menu entries in a tree-like format
This is useful for debugging purposes. menu_finalize() re-parents menu entries, and this function can be used to dump the final structure of the menu tree. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
This commit is contained in:
parent
65056488e8
commit
263e70bc42
@ -102,6 +102,7 @@ struct menu *menu_get_menu_or_parent_menu(struct menu *menu);
|
|||||||
int get_jump_key_char(void);
|
int get_jump_key_char(void);
|
||||||
struct gstr get_relations_str(struct symbol **sym_arr, struct list_head *head);
|
struct gstr get_relations_str(struct symbol **sym_arr, struct list_head *head);
|
||||||
void menu_get_ext_help(struct menu *menu, struct gstr *help);
|
void menu_get_ext_help(struct menu *menu, struct gstr *help);
|
||||||
|
void menu_dump(void);
|
||||||
|
|
||||||
/* symbol.c */
|
/* symbol.c */
|
||||||
void sym_clear_all_valid(void);
|
void sym_clear_all_valid(void);
|
||||||
|
@ -788,3 +788,77 @@ void menu_get_ext_help(struct menu *menu, struct gstr *help)
|
|||||||
if (sym)
|
if (sym)
|
||||||
get_symbol_str(help, sym, NULL);
|
get_symbol_str(help, sym, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* menu_dump - dump all menu entries in a tree-like format
|
||||||
|
*/
|
||||||
|
void menu_dump(void)
|
||||||
|
{
|
||||||
|
struct menu *menu = &rootmenu;
|
||||||
|
unsigned long long bits = 0;
|
||||||
|
int indent = 0;
|
||||||
|
|
||||||
|
while (menu) {
|
||||||
|
|
||||||
|
for (int i = indent - 1; i >= 0; i--) {
|
||||||
|
if (bits & (1ULL << i)) {
|
||||||
|
if (i > 0)
|
||||||
|
printf("| ");
|
||||||
|
else
|
||||||
|
printf("|-- ");
|
||||||
|
} else {
|
||||||
|
if (i > 0)
|
||||||
|
printf(" ");
|
||||||
|
else
|
||||||
|
printf("`-- ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (menu->type) {
|
||||||
|
case M_CHOICE:
|
||||||
|
printf("choice \"%s\"\n", menu->prompt->text);
|
||||||
|
break;
|
||||||
|
case M_COMMENT:
|
||||||
|
printf("comment \"%s\"\n", menu->prompt->text);
|
||||||
|
break;
|
||||||
|
case M_IF:
|
||||||
|
printf("if\n");
|
||||||
|
break;
|
||||||
|
case M_MENU:
|
||||||
|
printf("menu \"%s\"", menu->prompt->text);
|
||||||
|
if (!menu->sym) {
|
||||||
|
printf("\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
printf(" + ");
|
||||||
|
/* fallthrough */
|
||||||
|
case M_NORMAL:
|
||||||
|
printf("symbol %s\n", menu->sym->name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (menu->list) {
|
||||||
|
bits <<= 1;
|
||||||
|
menu = menu->list;
|
||||||
|
if (menu->next)
|
||||||
|
bits |= 1;
|
||||||
|
else
|
||||||
|
bits &= ~1;
|
||||||
|
indent++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (menu && !menu->next) {
|
||||||
|
menu = menu->parent;
|
||||||
|
bits >>= 1;
|
||||||
|
indent--;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (menu) {
|
||||||
|
menu = menu->next;
|
||||||
|
if (menu->next)
|
||||||
|
bits |= 1;
|
||||||
|
else
|
||||||
|
bits &= ~1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user