From: "Yann E. MORIN" <[email protected]>
Hello Michal, All,
Please pull these three rc-fixes:
- fix key handling in empty menus in mconf
- fix reference to eliminated duplicate expression in kconfig
- fix scripts/config wrt short --*-after options
Changes v1 -> v2:
- add fix for eliminated dups in menu.c
- fix >80 chars in key handling fix
Regards,
Yann E. MORIN
The following changes since commit f722406faae2d073cc1d01063d1123c35425939e:
Linux 3.10-rc1 (2013-05-11 17:14:08 -0700)
are available in the git repository at:
git://gitorious.org/linux-kconfig/linux-kconfig.git yem-kconfig-rc-fixes
for you to fetch changes up to e983b7b17ad1a978e954e6aaa62cf12bfc747883:
kconfig/menu.c: fix multiple references to expressions in menu_add_prop() (2013-05-30 00:14:01 +0200)
----------------------------------------------------------------
Clement Chauplannaz (1):
scripts/config: fix assignment of parameters for short version of --*-after options
Dirk Gouders (2):
mconf: handle keys in empty dialogs
kconfig/menu.c: fix multiple references to expressions in menu_add_prop()
scripts/config | 2 +-
scripts/kconfig/lxdialog/menubox.c | 9 +++++----
scripts/kconfig/mconf.c | 11 ++++++-----
scripts/kconfig/menu.c | 15 ++++++++++++++-
4 files changed, 26 insertions(+), 11 deletions(-)
--
.-----------------.--------------------.------------------.--------------------.
| Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ |
| +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
'------------------------------^-------^------------------^--------------------'
From: Dirk Gouders <[email protected]>
When entering an empty dialog, using the movement keys resulted in
unexpected characters beeing displayed, other keys like "z" and "h"
did not work as expected.
This patch handles the movement keys as well as other keys, especially
"z", "h" and "/".
Signed-off-by: Dirk Gouders <[email protected]>
[[email protected]: keep lines <80 chars, so reorder test]
Tested-by: "Yann E. MORIN" <[email protected]>
Reviewed-by: "Yann E. MORIN" <[email protected]>
Signed-off-by: "Yann E. MORIN" <[email protected]>
---
scripts/kconfig/lxdialog/menubox.c | 9 +++++----
scripts/kconfig/mconf.c | 11 ++++++-----
2 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/scripts/kconfig/lxdialog/menubox.c b/scripts/kconfig/lxdialog/menubox.c
index 48d382e..38cd69c 100644
--- a/scripts/kconfig/lxdialog/menubox.c
+++ b/scripts/kconfig/lxdialog/menubox.c
@@ -303,10 +303,11 @@ do_resize:
}
}
- if (i < max_choice ||
- key == KEY_UP || key == KEY_DOWN ||
- key == '-' || key == '+' ||
- key == KEY_PPAGE || key == KEY_NPAGE) {
+ if (item_count() != 0 &&
+ (i < max_choice ||
+ key == KEY_UP || key == KEY_DOWN ||
+ key == '-' || key == '+' ||
+ key == KEY_PPAGE || key == KEY_NPAGE)) {
/* Remove highligt of current item */
print_item(scroll + choice, choice, FALSE);
diff --git a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c
index 387dc8d..a69cbd7 100644
--- a/scripts/kconfig/mconf.c
+++ b/scripts/kconfig/mconf.c
@@ -670,11 +670,12 @@ static void conf(struct menu *menu, struct menu *active_menu)
active_menu, &s_scroll);
if (res == 1 || res == KEY_ESC || res == -ERRDISPLAYTOOSMALL)
break;
- if (!item_activate_selected())
- continue;
- if (!item_tag())
- continue;
-
+ if (item_count() != 0) {
+ if (!item_activate_selected())
+ continue;
+ if (!item_tag())
+ continue;
+ }
submenu = item_data();
active_menu = item_data();
if (submenu)
--
1.8.1.2
From: Clement Chauplannaz <[email protected]>
When --*-after options are used, two parameters are parsed from the
command-line before the adequate function is called:
- the `before' option, after which the new option will be inserted,
- the name of the option to enable/disable/modularise.
With the short version of --*-after options (namely -E, -D, -M), the
parsing step is not performed which leads to processing unset variables.
Add options -E, -D, -M to the test that triggers assignment of parameters
for --*-after options.
Signed-off-by: Clement Chauplannaz <[email protected]>
Acked-by: Andi Kleen <[email protected]>
Signed-off-by: Yann E. MORIN <[email protected]>
---
scripts/config | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scripts/config b/scripts/config
index bb4d3de..a65ecbb 100755
--- a/scripts/config
+++ b/scripts/config
@@ -105,7 +105,7 @@ while [ "$1" != "" ] ; do
;;
--refresh)
;;
- --*-after)
+ --*-after|-E|-D|-M)
checkarg "$1"
A=$ARG
checkarg "$2"
--
1.8.1.2
From: Dirk Gouders <[email protected]>
menu_add_prop() applies upper menus' visibilities to actual prompts
by AND-ing the prompts visibilities with the upper menus ones.
This creates a further reference to the menu's visibilities and when
the expression reduction functions do their work, they may remove or
modify expressions that have multiple references, thus causing
unpredictable side-effects.
The following example Kconfig constructs a case where this causes
problems: a menu and a prompt which's visibilities depend on the same
symbol. When invoking mconf with this Kconfig and pressing "Z" we
see a problem caused by a free'd expression still referenced by the
menu's visibility:
------------------------------------------------------------------------
mainmenu "Kconfig Testing Configuration"
config VISIBLE
def_bool n
config Placeholder
bool "Place holder"
menu "Invisible"
visible if VISIBLE
config TEST_VAR
bool "Test option" if VISIBLE
endmenu
------------------------------------------------------------------------
This patch fixes this problem by creating copies of the menu's
visibility expressions before AND-ing them with the prompt's one.
Signed-off-by: Dirk Gouders <[email protected]>
[[email protected]: move variable into its block-scope,
keep lines <80 chars, typo]
Tested-by: "Yann E. MORIN" <[email protected]>
Reviewed-by: "Yann E. MORIN" <[email protected]>
Signed-off-by: "Yann E. MORIN" <[email protected]>
---
scripts/kconfig/menu.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c
index b5c7d90..fd3f018 100644
--- a/scripts/kconfig/menu.c
+++ b/scripts/kconfig/menu.c
@@ -146,11 +146,24 @@ struct property *menu_add_prop(enum prop_type type, char *prompt, struct expr *e
struct menu *menu = current_entry;
while ((menu = menu->parent) != NULL) {
+ struct expr *dup_expr;
+
if (!menu->visibility)
continue;
+ /*
+ * Do not add a reference to the
+ * menu's visibility expression but
+ * use a copy of it. Otherwise the
+ * expression reduction functions
+ * will modify expressions that have
+ * multiple references which can
+ * cause unwanted side effects.
+ */
+ dup_expr = expr_copy(menu->visibility);
+
prop->visible.expr
= expr_alloc_and(prop->visible.expr,
- menu->visibility);
+ dup_expr);
}
}
--
1.8.1.2
On 30.5.2013 00:24, Yann E. MORIN wrote:
> From: "Yann E. MORIN" <[email protected]>
>
> Hello Michal, All,
>
> Please pull these three rc-fixes:
> - fix key handling in empty menus in mconf
> - fix reference to eliminated duplicate expression in kconfig
> - fix scripts/config wrt short --*-after options
Sorry for the delay. This is in kbuild.git#rc-fixes now, thanks.
Michal