dracut-lib.sh: fixed getargs() for empty arguments
authorHarald Hoyer <harald@redhat.com>
Wed, 10 Aug 2011 18:03:21 +0000 (20:03 +0200)
committerHarald Hoyer <harald@redhat.com>
Thu, 11 Aug 2011 08:49:09 +0000 (10:49 +0200)
modules.d/99base/dracut-lib.sh

index 80c1f84..6d05b62 100755 (executable)
@@ -123,34 +123,45 @@ getargbool() {
 
 _dogetargs() {
     set +x
-    local _o _found
+    local _o _found _key
     unset _o
     unset _found
     _getcmdline
-
+    _key=$1
+    set --
     for _o in $CMDLINE; do
-        if [ "$_o" = "$1" ]; then
-            return 0;
-        fi
-        if [ "${_o%%=*}" = "${1%=}" ]; then
-            echo -n "${_o#*=} ";
+        if [ "$_o" = "$_key" ]; then
+            _found=1;
+        elif [ "${_o%%=*}" = "${_key%=}" ]; then
+            [ -n "${_o%%=*}" ] && set -- "$@" "${_o#*=}";
             _found=1;
         fi
     done
-    [ -n "$_found" ] && return 0;
+    if [ -n "$_found" ]; then
+        [ $# -gt 0 ] && echo -n "$@"
+        return 0
+    fi
     return 1;
 }
 
 getargs() {
-    local _val
-    unset _val
     set +x
-    while [ $# -gt 0 ]; do
-        _val="$_val $(_dogetargs $1)"
-        shift
+    local _val _i _args _gfound
+    unset _val
+    unset _gfound
+    _args="$@"
+    set --
+    for _i in $_args; do
+        _val="$(_dogetargs $_i)"
+        [ $? -eq 0 ] && _gfound=1
+        [ -n "$_val" ] && set -- "$@" "$_val"
     done
-    if [ -n "$_val" ]; then
-        echo -n "$_val"
+    if [ -n "$_gfound" ]; then
+        if [ $# -gt 0 ]; then
+            echo -n "$@"
+        else
+            echo -n 1
+        fi
         [ "$RD_DEBUG" = "yes" ] && set -x
         return 0
     fi