]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Fix #1428 - zstdgrep now returns 1 on unmatch
authorLzu Tao <taolzu@gmail.com>
Wed, 28 Nov 2018 19:45:01 +0000 (02:45 +0700)
committerLzu Tao <taolzu@gmail.com>
Wed, 28 Nov 2018 19:45:01 +0000 (02:45 +0700)
programs/zstdgrep

index 9f871c03f1aa5b70ff4b2495cad6bf4316fc8550..7f050d04a1924e593f1e1c70d8ce2bfd29fffa16 100755 (executable)
@@ -31,94 +31,97 @@ grep_args=""
 hyphen=0
 silent=0
 
-prg=$(basename $0)
+prg=$(basename "$0")
 
 # handle being called 'zegrep' or 'zfgrep'
-case ${prg} in
-    *zegrep)
-       grep_args="-E";;
-    *zfgrep)
-       grep_args="-F";;
+case "${prg}" in
+    *zegrep) grep_args="-E";;
+    *zfgrep) grep_args="-F";;
 esac
 
 # skip all options and pass them on to grep taking care of options
 # with arguments, and if -e was supplied
 
-while [ $# -gt 0 -a ${endofopts} -eq 0 ]
-do
-    case $1 in
+while [ "$#" -gt 0 ] && [ "${endofopts}" -eq 0 ]; do
+    case "$1" in
     # from GNU grep-2.5.1 -- keep in sync!
-       -[ABCDXdefm])
-           if [ $# -lt 2 ]
-               then
-               echo "${prg}: missing argument for $1 flag" >&2
-               exit 1
-           fi
-           case $1 in
-               -e)
-                   pattern="$2"
-                   pattern_found=1
-                   shift 2
-                   break
-                   ;;
-               *)
-                   ;;
-           esac
-           grep_args="${grep_args} $1 $2"
-           shift 2
-           ;;
-       --)
-           shift
-           endofopts=1
-           ;;
-       -)
-           hyphen=1
-           shift
-           ;;
-       -h)
-           silent=1
-           shift
-           ;;
-       -*)
-           grep_args="${grep_args} $1"
-           shift
-           ;;
-       *)
-           # pattern to grep for
-           endofopts=1
-           ;;
+        -[ABCDXdefm])
+            if [ "$#" -lt 2 ]; then
+                printf '%s: missing argument for %s flag\n' "${prg}" "$1" >&2
+                exit 1
+            fi
+            case "$1" in
+                -e)
+                    pattern="$2"
+                    pattern_found=1
+                    shift 2
+                    break
+                    ;;
+                *)
+                    ;;
+            esac
+            grep_args="${grep_args} $1 $2"
+            shift 2
+            ;;
+        --)
+            shift
+            endofopts=1
+            ;;
+        -)
+            hyphen=1
+            shift
+            ;;
+        -h)
+            silent=1
+            shift
+            ;;
+        -*)
+            grep_args="${grep_args} $1"
+            shift
+            ;;
+        *)
+            # pattern to grep for
+            endofopts=1
+            ;;
     esac
 done
 
 # if no -e option was found, take next argument as grep-pattern
-if [ ${pattern_found} -lt 1 ]
-then
-    if [ $# -ge 1 ]; then
-       pattern="$1"
-       shift
-    elif [ ${hyphen} -gt 0 ]; then
-       pattern="-"
+if [ "${pattern_found}" -lt 1 ]; then
+    if [ "$#" -ge 1 ]; then
+        pattern="$1"
+        shift
+    elif [ "${hyphen}" -gt 0 ]; then
+        pattern="-"
     else
-       echo "${prg}: missing pattern" >&2
-       exit 1
+        printf '%s: missing pattern\n' "${prg}" >&2
+        exit 1
     fi
 fi
 
+EXIT_CODE=0
 # call grep ...
-if [ $# -lt 1 ]
-then
+if [ "$#" -lt 1 ]; then
     # ... on stdin
-    ${zcat} -fq - | ${grep} ${grep_args} -- "${pattern}" -
+    # shellcheck disable=SC2086
+    "${zcat}" -fq - | "${grep}" ${grep_args} -- "${pattern}" -
+    EXIT_CODE=$?
 else
     # ... on all files given on the command line
-    if [ ${silent} -lt 1 -a $# -gt 1 ]; then
-       grep_args="-H ${grep_args}"
+    if [ "${silent}" -lt 1 ] && [ "$#" -gt 1 ]; then
+        grep_args="-H ${grep_args}"
     fi
-    while [ $# -gt 0 ]
-    do
-       ${zcat} -fq -- "$1" | ${grep} --label="${1}" ${grep_args} -- "${pattern}" -
-       shift
+    CUR_EXIT_CODE=0
+    EXIT_CODE=1
+    while [ "$#" -gt 0 ]; do
+        # shellcheck disable=SC2086
+        "${zcat}" -fq -- "$1" | "${grep}" --label="${1}" ${grep_args} -- "${pattern}" -
+        CUR_EXIT_CODE=$?
+        if [ "${CUR_EXIT_CODE}" -eq 0 ] && [ "${EXIT_CODE}" -ne 1 ]; then
+            EXIT_CODE=0
+        fi
+        shift
     done
 fi
 
-exit 0
+exit "${EXIT_CODE}"