[U-Boot] [PATCH v2 2/4] kconfig: fix whitespace handling bug of savedefconfig

Masahiro Yamada yamada.m at jp.panasonic.com
Wed Sep 3 22:41:32 CEST 2014


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 <yamada.m at jp.panasonic.com>
---

Changes in v2:
  - Resend as a series
  - Change the commit subject

 scripts/multiconfig.sh | 37 +++++++++++++++++++++++++++++--------
 1 file changed, 29 insertions(+), 8 deletions(-)

diff --git a/scripts/multiconfig.sh b/scripts/multiconfig.sh
index 785f563..7606193 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:
-- 
1.9.1



More information about the U-Boot mailing list