Currently, scripts/config removes the leading double-quote from
string options, but leaves the trailing double-quote.
Also, double-quotes in a string are escaped, but scripts/config
does not unescape those when printing
Finally, scripts/config does not escape double-quotes when setting
string options.
Eg. the current behavior:
$ grep -E '^CONFIG_FOO=' .config
CONFIG_FOO="Bar \"Buz\" Meh"
$ ./scripts/config -s FOO
Bar \"Buz\" Meh"
$ ./scripts/config --set-str FOO 'Alpha "Bravo" Charlie'
$ grep -E '^CONFIG_FOO=' .config
CONFIG_FOO="Alpha "Bravo" Charlie"
Fix those three, giving this new behavior:
$ grep -E '^CONFIG_FOO=' .config
CONFIG_FOO="Bar \"Buz\" Meh"
$ ./scripts/config -s FOO
Bar "Buz" Meh
$ ./scripts/config --set-str FOO 'Alpha "Bravo" Charlie'
$ grep -E '^CONFIG_FOO=' .config
CONFIG_FOO="Alpha \"Bravo\" Charlie"
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Acked-by: Andi Kleen <andi@firstfloor.org>
Signed-off-by: Michal Marek <mmarek@suse.cz>
;;
--set-str)
- set_var "CONFIG_$ARG" "CONFIG_$ARG=\"$1\""
+ # sed swallows one level of escaping, so we need double-escaping
+ set_var "CONFIG_$ARG" "CONFIG_$ARG=\"${1//\"/\\\\\"}\""
shift
;;
if [ $? != 0 ] ; then
echo undef
else
- V="${V/CONFIG_$ARG=/}"
- V="${V/\"/}"
- echo "$V"
+ V="${V/#CONFIG_$ARG=/}"
+ V="${V/#\"/}"
+ V="${V/%\"/}"
+ V="${V/\\\"/\"}"
+ echo "${V}"
fi
fi
;;