Escape double quotes on eval so the quotes are still there on the second evaluation.
This is required to handle strings with special characters.

Credit for this patch goes to Keith Owens, I simply extracted it from kbuild-2.5.

        Sam
--- Menuconfig.orig     Fri May 31 21:55:40 2002
+++ Menuconfig  Fri May 31 21:42:16 2002
@@ -73,6 +73,10 @@
 # - Support for multiple conditions in dep_tristate().
 # - Implemented new functions: define_tristate(), define_int(), define_hex(),
 #   define_string(), dep_bool().
+#
+# 12 November 2001, Keith Owens <[EMAIL PROTECTED]>
+# Escape double quotes on eval so the quotes are still there on the second
+# evaluation, required to handle strings with special characters.
 # 
 
 
@@ -105,11 +109,11 @@
     eval x=\$$1
     if [ -z "$x" ]; then
        eval `sed -n -e 's/# \(.*\) is not set.*/\1=n/' -e "/^$1=/p" 
arch/$ARCH/defconfig`
-       eval x=\${$1:-"$2"}
+       eval x=\${$1:-\"$2\"}
        eval $1=$x
        eval INFO_$1="' (NEW)'"
     fi
-    eval info="\$INFO_$1"
+    eval info=\"\$INFO_$1\"
 }
 
 #
@@ -151,7 +155,7 @@
 }
 
 function define_string () {
-       eval $1="$2"
+       eval $1=\"$2\"
 }
 
 #
@@ -333,7 +337,7 @@
 
        while [ -n "$2" ]
        do
-               if eval [ "_\$$2" = "_y" ]
+               if eval [ \"_\$$2\" = \"_y\" ]
                then
                        current=$1
                        break
@@ -543,9 +547,9 @@
                        # we avoid them:
                        if expr "$answer" : '0$' '|' "$answer" : '[1-9][0-9]*$' '|' 
"$answer" : '-[1-9][0-9]*$' >/dev/null
                        then
-                               eval $2="$answer"
+                               eval $2=\"$answer\"
                        else
-                               eval $2="$3"
+                               eval $2=\"$3\"
                                echo -en "\007"
                                ${DIALOG} --backtitle "$backtitle" \
                                        --infobox "You have made an invalid entry." 3 
43
@@ -576,9 +580,9 @@
 
                        if expr "$answer" : '[0-9a-fA-F][0-9a-fA-F]*$' >/dev/null
                        then
-                               eval $2="$answer"
+                               eval $2=\"$answer\"
                        else
-                               eval $2="$3"
+                               eval $2=\"$3\"
                                echo -en "\007"
                                ${DIALOG} --backtitle "$backtitle" \
                                        --infobox "You have made an invalid entry." 3 
43
@@ -676,9 +680,9 @@
        do
                if [ "$2" = "$choice" ]
                then
-                       eval $2="y"
+                       eval $2=\"y\"
                else
-                       eval $2="n"
+                       eval $2=\"n\"
                fi
                
                shift ; shift
@@ -941,9 +945,9 @@
 
                        [ "_" = "_$ALT_CONFIG" ] && break
 
-                       if eval [ -r "$ALT_CONFIG" ]
+                       if eval [ -r \"$ALT_CONFIG\" ]
                        then
-                               eval load_config_file "$ALT_CONFIG"
+                               eval load_config_file \"$ALT_CONFIG\"
                                break
                        else
                                echo -ne "\007"
@@ -1067,12 +1071,12 @@
        #
        function bool () {
                set_x_info "$2" "n"
-               eval define_bool "$2" "$x"
+               eval define_bool \"$2\" \"$x\"
        }
 
        function tristate () {
                set_x_info "$2" "n"
-               eval define_tristate "$2" "$x"
+               eval define_tristate \"$2\" \"$x\"
        }
 
        function dep_tristate () {
@@ -1138,19 +1142,19 @@
        }
 
        function define_hex () {
-               eval $1="$2"
+               eval $1=\"$2\"
                        echo "$1=$2"                    >>$CONFIG
                echo "#define $1 0x${2##*[x,X]}"        >>$CONFIG_H
        }
 
        function define_int () {
-               eval $1="$2"
+               eval $1=\"$2\"
                echo "$1=$2"                    >>$CONFIG
                echo "#define $1 ($2)"          >>$CONFIG_H
        }
 
        function define_string () {
-               eval $1="$2"
+               eval $1=\"$2\"
                echo "$1=\"$2\""                >>$CONFIG
                echo "#define $1 \"$2\""        >>$CONFIG_H
        }
@@ -1160,7 +1164,7 @@
        }
 
        function define_tristate () {
-               eval $1="$2"
+               eval $1=\"$2\"
 
                case "$2" in
                y)
@@ -1199,7 +1203,7 @@
                set -- $choices
                while [ -n "$2" ]
                do
-                       if eval [ "_\$$2" = "_y" ]
+                       if eval [ \"_\$$2\" = \"_y\" ]
                        then
                                current=$1
                                break

Reply via email to