Refactor 2ff(1) - farbfeld - suckless image format with conversion tools | |
git clone git://git.suckless.org/farbfeld | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 42678350147b13345174f1e4c637a89c442ffd3c | |
parent 65435b097b355105dc9a32f87ed80427d56b1c91 | |
Author: Laslo Hunhold <[email protected]> | |
Date: Fri, 14 Apr 2017 17:32:12 +0200 | |
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: | |
M 2ff | 42 ++++++++++++++++-------------… | |
1 file changed, 22 insertions(+), 20 deletions(-) | |
--- | |
diff --git a/2ff b/2ff | |
@@ -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" ]; t… | |
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 |