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);
|
||||
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_dump(void);
|
||||
|
||||
/* symbol.c */
|
||||
void sym_clear_all_valid(void);
|
||||
|
@ -788,3 +788,77 @@ void menu_get_ext_help(struct menu *menu, struct gstr *help)
|
||||
if (sym)
|
||||
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