From 8dffe663a2e50751150d92caf834f717d397ac80 Mon Sep 17 00:00:00 2001 From: Masahiro Yamada Date: Thu, 4 Sep 2014 05:41:32 +0900 Subject: [PATCH] kconfig: fix whitespace handling bug of savedefconfig Commit 3ff291f371fa9858426774f3732924bacb61ed1c (kconfig: convert Kconfig helper script into a shell script) introduced another regression. Shell usually handles whitespaces as separators, so "make saveconfig" outputs # CONFIG_FOO is not set into: # CONFIG_FOO is not set Whitespaces should not be treated as separators here. Signed-off-by: Masahiro Yamada Acked-by: Simon Glass --- scripts/multiconfig.sh | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/scripts/multiconfig.sh b/scripts/multiconfig.sh index 785f5639a6..7606193102 100644 --- a/scripts/multiconfig.sh +++ b/scripts/multiconfig.sh @@ -170,7 +170,7 @@ do_savedefconfig () { # backslashes as an escape character while read -r line do - output_lines="$output_lines $line" + output_lines="$output_lines%$line" done < defconfig for img in $subimages @@ -185,43 +185,64 @@ do_savedefconfig () { tmp= match= + # "# CONFIG_FOO is not set" should not be divided. + # Use "%" as a separator, instead of a whitespace. + # "%" is unlikely to appear in defconfig context. + save_IFS=$IFS + IFS=% # coalesce common lines together for i in $output_lines do case "$i" in "[+A-Z]*:$line") - tmp="$tmp $unmatched" + tmp="$tmp%$unmatched" i=$(echo "$i" | \ sed -e "s/^\([^:]\)*/\1$symbol/") - tmp="$tmp $i" + tmp="$tmp%$i" match=1 ;; "$line") - tmp="$tmp $unmatched" - tmp="$tmp +$symbol:$i" + tmp="$tmp%$unmatched" + tmp="$tmp%+$symbol:$i" match=1 ;; *) - tmp="$tmp $i" + tmp="$tmp%$i" ;; esac done + # Restore the default separator for the outer for loop. + IFS=$save_IFS + if [ "$match" ]; then output_lines="$tmp" unmatched= else - unmatched="$unmatched $symbol:$line" + unmatched="$unmatched%$symbol:$line" fi done < defconfig done rm -f defconfig touch defconfig + + save_IFS=$IFS + IFS=% + for line in $output_lines do - echo $line >> defconfig + case "$line" in + "") + # do not output blank lines + ;; + *) + echo $line >> defconfig + ;; + esac done + + IFS=$save_IFS } # Usage: -- 2.39.5