diff options
author | Laslo Hunhold <dev@frign.de> | 2017-04-14 17:32:12 +0200 |
---|---|---|
committer | Laslo Hunhold <dev@frign.de> | 2017-04-14 17:36:49 +0200 |
commit | 42678350147b13345174f1e4c637a89c442ffd3c (patch) | |
tree | 21f301eb1b81e537125e1750a04c2cb9695846af /2ff | |
parent | 65435b097b355105dc9a32f87ed80427d56b1c91 (diff) |
Refactor 2ff(1)
The Unix philosophy teaches us that tools should strive to output only
necessary diagnostic information and also reflect errors properly with
the return value.
There were three subtle problems with 2ff:
1) If the farbfeld-passthrough failed, it would return 1 instead
of 1.
2) If the first 8 bytes contained a NUL byte, bash would print
an ugly warning message. Passing it through tr -d '\0' fixes
that.
3) Lack of comments. I added some to make the structure even
clearer, also including using an if-else-structure.
I removed the 2ff error message; the tools themselves print proper
messages already.
Diffstat (limited to '2ff')
-rwxr-xr-x | 2ff | 42 |
1 files changed, 22 insertions, 20 deletions
@@ -1,36 +1,38 @@ #!/bin/sh + +# arguments if [ "$#" -ne 0 ]; then echo "usage: $0" >&2 exit 1 fi +# write input into temporary file TMP=$(mktemp) trap 'rm "$TMP"' EXIT - cat > "$TMP" -if [ "$(dd if="$TMP" bs=1 count=8 2>/dev/null)" = "farbfeld" ]; then +# determine the mime-type +if [ "$(dd if="$TMP" bs=1 count=8 2>/dev/null | tr -d '\0')" = "farbfeld" ]; then cat "$TMP" - exit 0 -fi +else + MIME=$(file -ib "$TMP" | cut -d ";" -f 1) -FORMAT=$(file -ib "$TMP" | cut -d ";" -f 1) - -case "$FORMAT" in -image/png) - png2ff < "$TMP" - ;; -image/jpeg) - jpg2ff < "$TMP" - ;; -*) - convert "$TMP" png:- 2>/dev/null | png2ff 2>/dev/null - ;; -esac + case "$MIME" in + image/png) + png2ff < "$TMP" + ;; + image/jpeg) + jpg2ff < "$TMP" + ;; + *) + convert "$TMP" png:- 2>/dev/null | png2ff 2>/dev/null + ;; + esac +fi +# errors if [ $? -ne 0 ]; then - printf "%s: failed to convert from %s\n" "$0" "$FORMAT" >&2 exit 1 +else + exit 0 fi - -exit 0 |