keyfunc.sh.in: Make sure we can match the `0' string.
authorMark Wooding <mdw@distorted.org.uk>
Wed, 19 Sep 2012 23:59:16 +0000 (00:59 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Thu, 20 Sep 2012 00:10:17 +0000 (01:10 +0100)
The expr(1) tool exits with status 1 if its output is zero.  The `:'
operator evaluates to the substring matched by the outermost parentheses
in the pattern, if there are any.  Therefore, matching `0' against the
`R_NUMERIC' pattern always appears to fail.  Fix this and similar problems
by adding extra parens around the entire pattern, including the leading
sentinel `Q'.

keyfunc.sh.in

index 98354d1..31843bf 100644 (file)
@@ -154,8 +154,14 @@ check () {
 
   validp=t
   case "$thing" in
-    *"$nl"*) validp=nil ;;
-    *) if ! expr >/dev/null "Q$thing" : "Q$ckpat\$"; then validp=nil; fi ;;
+    *"$nl"*)
+      validp=nil
+      ;;
+    *)
+      if ! expr >/dev/null "Q$thing" : "\(Q$ckpat\)\$"; then
+      validp=nil
+      fi
+      ;;
   esac
   case $validp in
     nil) echo >&2 "$quis: bad $ckwhat \`$thing'"; exit 1 ;;