From: Masahiro Yamada <masahiroy@kernel.org>
To: linux-kbuild@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, Masahiro Yamada <masahiroy@kernel.org>
Subject: [PATCH 05/10] kconfig: add sym_get_choice_menu() helper
Date: Sun, 5 May 2024 03:33:28 +0900 [thread overview]
Message-ID: <20240504183333.2031860-5-masahiroy@kernel.org> (raw)
In-Reply-To: <20240504183333.2031860-1-masahiroy@kernel.org>
Choices and their members are associated via the P_CHOICE property.
Currently, prop_get_symbol(sym_get_choice_prop(sym)) is used to obtain
the choice of the given choice member.
We can do this without relying on P_CHOICE by checking the parent in
the menu structure.
Introduce a new helper to retrieve the choice if the given symbol is a
choice member.
This is intended to replace prop_get_symbol(sym_get_choice_prop(sym))
and deprecate P_CHOICE eventually.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---
scripts/kconfig/lkc_proto.h | 1 +
scripts/kconfig/symbol.c | 35 +++++++++++++++++++++++++++++++++++
2 files changed, 36 insertions(+)
diff --git a/scripts/kconfig/lkc_proto.h b/scripts/kconfig/lkc_proto.h
index 2807fa584c2b..d76aaf4ea117 100644
--- a/scripts/kconfig/lkc_proto.h
+++ b/scripts/kconfig/lkc_proto.h
@@ -34,6 +34,7 @@ bool sym_string_within_range(struct symbol *sym, const char *str);
bool sym_set_string_value(struct symbol *sym, const char *newval);
bool sym_is_changeable(struct symbol *sym);
struct property * sym_get_choice_prop(struct symbol *sym);
+struct menu *sym_get_choice_menu(struct symbol *sym);
const char * sym_get_string_value(struct symbol *sym);
const char * prop_get_type_name(enum prop_type type);
diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c
index 8512c29c84bb..23829f44b8f8 100644
--- a/scripts/kconfig/symbol.c
+++ b/scripts/kconfig/symbol.c
@@ -78,6 +78,41 @@ struct property *sym_get_choice_prop(struct symbol *sym)
return NULL;
}
+/**
+ * sym_get_choice_menu - get the parent choice menu if present
+ *
+ * @sym: a symbol pointer
+ *
+ * Return: a choice menu if this function is called against a choice member.
+ */
+struct menu *sym_get_choice_menu(struct symbol *sym)
+{
+ struct menu *menu = NULL;
+ struct menu *m;
+
+ /*
+ * Choice members must have a prompt. Find a menu entry with a prompt,
+ * and assume it resides inside a choice block.
+ */
+ list_for_each_entry(m, &sym->menus, link)
+ if (m->prompt) {
+ menu = m;
+ break;
+ }
+
+ if (!menu)
+ return NULL;
+
+ do {
+ menu = menu->parent;
+ } while (menu && !menu->sym);
+
+ if (menu && menu->sym && sym_is_choice(menu->sym))
+ return menu;
+
+ return NULL;
+}
+
static struct property *sym_get_default_prop(struct symbol *sym)
{
struct property *prop;
--
2.40.1
next prev parent reply other threads:[~2024-05-04 18:34 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-04 18:33 [PATCH 01/10] kconfig: gconf: redraw pane correctly after loading a config file Masahiro Yamada
2024-05-04 18:33 ` [PATCH 02/10] kconfig: gconf: remove debug code Masahiro Yamada
2024-05-04 18:33 ` [PATCH 03/10] kconfig: gconf: use MENU_CHANGED instead of SYMBOL_CHANGED Masahiro Yamada
2024-05-04 18:33 ` [PATCH 04/10] kconfig: used linked list in sym_set_changed() Masahiro Yamada
2024-05-04 18:33 ` Masahiro Yamada [this message]
2024-05-04 18:33 ` [PATCH 06/10] kconfig: use sym_get_choice_menu() in conf_write_defconfig() Masahiro Yamada
2024-05-04 18:33 ` [PATCH 07/10] kconfig: use menu_list_for_each_sym() in sym_check_choice_deps() Masahiro Yamada
2024-05-04 18:33 ` [PATCH 08/10] kconfig: turn conf_choice() into void function Masahiro Yamada
2024-05-04 18:33 ` [PATCH 09/10] kconfig: turn missing prompt for choice members into error Masahiro Yamada
2024-05-04 18:33 ` [PATCH 10/10] kconfig: turn defaults and additional " Masahiro Yamada
2024-05-05 15:01 ` Masahiro Yamada
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240504183333.2031860-5-masahiroy@kernel.org \
--to=masahiroy@kernel.org \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox