From e83356217b48308b3a4dc975940c79a22e159238 Mon Sep 17 00:00:00 2001 From: Dean Troyer Date: Tue, 27 Nov 2012 17:00:11 -0600 Subject: [PATCH] Fix ini functions to handle spaces in section names This allows section names to look like: [ default ] OpenSSL is the primary offender for this usage. Change-Id: If5c711107e73cebab9d4a26ca02a7ce572224377 --- functions | 12 ++++++------ tests/functions.sh | 12 +++++++++++- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/functions b/functions index 8ab3eefc2a..cdb982d5fc 100644 --- a/functions +++ b/functions @@ -370,7 +370,7 @@ function inicomment() { local file=$1 local section=$2 local option=$3 - sed -i -e "/^\[$section\]/,/^\[.*\]/ s|^\($option[ \t]*=.*$\)|#\1|" $file + sed -ie "/^\[ *$section *\]/,/^\[.*\]/ s|^\($option[ \t]*=.*$\)|#\1|" $file } # Uncomment an option in an INI file @@ -379,7 +379,7 @@ function iniuncomment() { local file=$1 local section=$2 local option=$3 - sed -i -e "/^\[$section\]/,/^\[.*\]/ s|[^ \t]*#[ \t]*\($option[ \t]*=.*$\)|\1|" $file + sed -ie "/^\[ *$section *\]/,/^\[.*\]/ s|[^ \t]*#[ \t]*\($option[ \t]*=.*$\)|\1|" $file } @@ -390,7 +390,7 @@ function iniget() { local section=$2 local option=$3 local line - line=$(sed -ne "/^\[$section\]/,/^\[.*\]/ { /^$option[ \t]*=/ p; }" $file) + line=$(sed -ne "/^\[ *$section *\]/,/^\[.*\]/ { /^$option[ \t]*=/ p; }" $file) echo ${line#*=} } @@ -402,18 +402,18 @@ function iniset() { local section=$2 local option=$3 local value=$4 - if ! grep -q "^\[$section\]" $file; then + if ! grep -q "^\[ *$section *\]" $file; then # Add section at the end echo -e "\n[$section]" >>$file fi if [[ -z "$(iniget $file $section $option)" ]]; then # Add it - sed -i -e "/^\[$section\]/ a\\ + sed -ie "/^\[ *$section *\]/ a\\ $option = $value " $file else # Replace it - sed -i -e "/^\[$section\]/,/^\[.*\]/ s|^\($option[ \t]*=[ \t]*\).*$|\1$value|" $file + sed -ie "/^\[ *$section *\]/,/^\[.*\]/ s|^\($option[ \t]*=[ \t]*\).*$|\1$value|" $file fi } diff --git a/tests/functions.sh b/tests/functions.sh index 3a0f31999d..d2cc5c4438 100755 --- a/tests/functions.sh +++ b/tests/functions.sh @@ -54,6 +54,9 @@ handlers = aa, bb [bbb] handlers=ee,ff + +[ ccc ] +spaces = yes EOF # Test with spaces @@ -74,6 +77,14 @@ else echo "iniget failed: $VAL" fi +# Test with spaces in section header + +VAL=$(iniget test.ini ccc spaces) +if [[ "$VAL" == "yes" ]]; then + echo "OK: $VAL" +else + echo "iniget failed: $VAL" +fi # Test without spaces, end of file @@ -112,7 +123,6 @@ else echo "iniget failed: $VAL" fi - # Test option not exist VAL=$(iniget test.ini aaa debug)