[s390utils/f17] improve DASD parameters handling in normalize_dasd_arg (#824807)

Dan Horák sharkcz at fedoraproject.org
Fri May 25 07:04:43 UTC 2012


commit 0355cd14d3e5edc0776a81e3b97ff8d7b156affc
Author: Dan Horák <dan at danny.cz>
Date:   Fri May 25 09:04:27 2012 +0200

    improve DASD parameters handling in normalize_dasd_arg (#824807)

 normalize_dasd_arg |  146 +++++++++++++++++++++++++++------------------------
 s390utils.spec     |    5 ++-
 2 files changed, 81 insertions(+), 70 deletions(-)
---
diff --git a/normalize_dasd_arg b/normalize_dasd_arg
index 2f622e3..3e7afa6 100644
--- a/normalize_dasd_arg
+++ b/normalize_dasd_arg
@@ -39,74 +39,82 @@ function canonicalize_devno()
 }
 
 read DASD
-for dasditem in $(echo $DASD |sed 's/,/ /g')
-    do
-    unset range features lo hi attrs devno lodevno hidevno devbusid sys
-    case $dasditem in
-        autodetect|probeonly|nopav|nofcx|"") continue ;; # these don't gen a config
-        *)
-            IFS='('
-            read range features <<< "$dasditem"
-            unset IFS
-            lo=${range%%-*}
-            [[ "$lo" =~ (^[[:xdigit:]]+\.[0-3]\.[[:xdigit:]]{4}$)|(^[[:xdigit:]]{3,4}$) ]]
-            case $? in
-                0)  # string matched the pattern
-                    lo=$(canonicalize_devno $lo) ;;
-                1)  # string did not match the pattern
-                    echo $"Incorrect format for lower bound of DASD range $range: $lo"
-                    exit 1
-                    ;;
-                2)  echo "l.$LINENO: syntax error in regex of match operator =~, code needs to be fixed" 1>&2 ;;
-                *)  echo "l.$LINENO: unexpected return code of regex match operator =~, code needs to be fixed" 1>&2 ;;
-            esac
-            if [ "${range//*-*/}" = "" ]; then
-                hi=${range##*-}
-                [[ "$hi" =~ (^[[:xdigit:]]+\.[0-3]\.[[:xdigit:]]{4}$)|(^[[:xdigit:]]{3,4}$) ]]
-                case $? in
-                    0)  # string matched the pattern
-                        hi=$(canonicalize_devno $hi)
-                        if [ "${lo%.*}" != "${hi%.*}" ]; then
-                            echo $"Prefixes of DASD range $range do not match: ${lo%.*} != ${hi%.*}"
+# See if we've gotten a format like <dev>,feature or <dev>,<dev>,<dev>
+[[ "$DASD" =~ (\,*=[[:digit:]]) ]]
+case $? in
+    # case of 0 is features, just turn the comma into a space
+    0)  echo $DASD |sed 's/,/ /g';;
+    *) # We've got no features, do things normally
+        for dasditem in $(echo $DASD |sed 's/,/ /g')
+            do
+            unset range features lo hi attrs devno lodevno hidevno devbusid sys
+            case $dasditem in
+                autodetect|probeonly|nopav|nofcx|"") continue ;; # these don't gen a config
+                *)
+                    IFS='('
+                    read range features <<< "$dasditem"
+                    unset IFS
+                    lo=${range%%-*}
+                    [[ "$lo" =~ (^[[:xdigit:]]+\.[0-3]\.[[:xdigit:]]{4}$)|(^[[:xdigit:]]{3,4}$) ]]
+                    case $? in
+                        0)  # string matched the pattern
+                            lo=$(canonicalize_devno $lo) ;;
+                        1)  # string did not match the pattern
+                            echo $"Incorrect format for lower bound of DASD range $range: $lo" 1>&2
                             exit 1
-                        fi
-                        ;;
-                    1)  # string did not match the pattern
-                        echo $"Incorrect format for upper bound of DASD range $range: $hi"
-                        exit 1
-                        ;;
-                    2)  echo "l.$LINENO: syntax error in regex of match operator =~, code needs to be fixed" 1>&2 ;;
-                    *)  echo "l.$LINENO: unexpected return code of regex match operator =~, code needs to be fixed" 1>&2 ;;
-                esac
-            fi
-            if [ "${features//*)/}" != "" ]; then
-                echo $"Missing closing parenthesis at features of DASD range $range: ($features"
-                exit 1
-            fi
-            if [ -n "$features" ]; then
-                attrs=""
-                features="${features%)}"
-                for feature in $(echo $features |sed 's/:/\n/g'); do
-                    case $feature in
-                        ro) attrs=$attrs" readonly" ;;
-                        diag) attrs=$attrs" use_diag" ;;
-                        erplog|failfast) attrs=$attrs" "$feature ;;
-                        *) echo $"Unknown DASD feature for device range $range: $feature"
-                           exit 1
-                           ;;
+                            ;;
+                        2)  echo "l.$LINENO: syntax error in regex of match operator =~, code needs to be fixed" 1>&2 ;;
+                        *)  echo "l.$LINENO: unexpected return code of regex match operator =~, code needs to be fixed" 1>&2 ;;
                     esac
-                done
-            fi
-            [ -z "$hi" ] && hi=$lo
-            lodevno=$((0x${lo##*.}))
-            hidevno=$((0x${hi##*.}))
-            for ((devno=$lodevno; $devno <= $hidevno; ++devno)); do
-                devbusid=$(printf "%s.%04x" ${lo%.*} $devno)
-                echo -n "$devbusid"
-                for attr in $attrs; do
-                    echo -n " $attr=1"
-                done
-                echo
-            done
-    esac
-done
+                    if [ "${range//*-*/}" = "" ]; then
+                        hi=${range##*-}
+                        [[ "$hi" =~ (^[[:xdigit:]]+\.[0-3]\.[[:xdigit:]]{4}$)|(^[[:xdigit:]]{3,4}$) ]]
+                        case $? in
+                            0)  # string matched the pattern
+                                hi=$(canonicalize_devno $hi)
+                                if [ "${lo%.*}" != "${hi%.*}" ]; then
+                                    echo $"Prefixes of DASD range $range do not match: ${lo%.*} != ${hi%.*}" 1>&2
+                                    exit 1
+                                fi
+                                ;;
+                            1)  # string did not match the pattern
+                                echo $"Incorrect format for upper bound of DASD range $range: $hi" 1>&2
+                                exit 1
+                                ;;
+                            2)  echo "l.$LINENO: syntax error in regex of match operator =~, code needs to be fixed" 1>&2 ;;
+                            *)  echo "l.$LINENO: unexpected return code of regex match operator =~, code needs to be fixed" 1>&2 ;;
+                        esac
+                    fi
+                    if [ "${features//*)/}" != "" ]; then
+                        echo $"Missing closing parenthesis at features of DASD range $range: ($features" 1>&2
+                        exit 1
+                    fi
+                    if [ -n "$features" ]; then
+                        attrs=""
+                        features="${features%)}"
+                        for feature in $(echo $features |sed 's/:/\n/g'); do
+                            case $feature in
+                                ro) attrs=$attrs" readonly" ;;
+                                diag) attrs=$attrs" use_diag" ;;
+                                erplog|failfast) attrs=$attrs" "$feature ;;
+                                *) echo $"Unknown DASD feature for device range $range: $feature" 1>&2
+                                   exit 1
+                                   ;;
+                            esac
+                        done
+                    fi
+                    [ -z "$hi" ] && hi=$lo
+                    lodevno=$((0x${lo##*.}))
+                    hidevno=$((0x${hi##*.}))
+                    for ((devno=$lodevno; $devno <= $hidevno; ++devno)); do
+                        devbusid=$(printf "%s.%04x" ${lo%.*} $devno)
+                        echo -n "$devbusid"
+                        for attr in $attrs; do
+                            echo -n " $attr=1"
+                        done
+                        echo
+                    done
+            esac
+        done
+        ;;
+esac
diff --git a/s390utils.spec b/s390utils.spec
index 463d374..285993b 100644
--- a/s390utils.spec
+++ b/s390utils.spec
@@ -8,7 +8,7 @@ Name:           s390utils
 Summary:        Utilities and daemons for IBM System/z
 Group:          System Environment/Base
 Version:        1.16.0
-Release:        8%{?dist}
+Release:        9%{?dist}
 Epoch:          2
 License:        GPLv2 and GPLv2+ and CPL
 Buildroot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@@ -867,6 +867,9 @@ User-space development files for the s390/s390x architecture.
 
 
 %changelog
+* Fri May 25 2012 Dan Horák <dan[at]danny.cz> 2:1.16.0-9
+- improve DASD parameters handling in normalize_dasd_arg (#824807)
+
 * Wed May 23 2012 Dan Horák <dan[at]danny.cz> 2:1.16.0-8
 - add normalize_dasd_arg script (#823078)
 


More information about the scm-commits mailing list