summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--deps.mk1
-rwxr-xr-xsrc/statusconv50
2 files changed, 51 insertions, 0 deletions
diff --git a/deps.mk b/deps.mk
index 7dd2086..babcad3 100644
--- a/deps.mk
+++ b/deps.mk
@@ -5,6 +5,7 @@ sources.sh = \
src/mkstemp \
src/now \
src/pre \
+ src/statusconv \
src/tempname \
src/timestamp \
src/uuid \
diff --git a/src/statusconv b/src/statusconv
new file mode 100755
index 0000000..9bc858b
--- /dev/null
+++ b/src/statusconv
@@ -0,0 +1,50 @@
+#!/bin/sh
+set -eu
+
+
+FROM_N=''
+TO_N=''
+for flag in "$@"; do
+ case "$flag" in
+ *[0-9]:*[0-9])
+ X="$(printf '%s' "$flag" | cut -d ':' -f1)"
+ Y="$(printf '%s' "$flag" | cut -d ':' -f2)"
+ FROM_N="$FROM_N $X"
+ TO_N="$TO_N $Y"
+ shift
+ ;;
+ *)
+ break
+ ;;
+ esac
+done
+
+
+if [ "$1" = '--' ]; then
+ shift
+fi
+
+STATUS=0
+"$@" || STATUS=$?
+
+FOUND=false
+I=-1
+for from in $FROM_N; do
+ I=$((I + 1))
+ if [ "$from" = "$STATUS" ]; then
+ FOUND=true
+ break
+ fi
+done
+
+if [ "$FOUND" = false ]; then
+ exit "$STATUS"
+fi
+
+J=-1
+for to in $TO_N; do
+ J=$((J + 1))
+ if [ "$J" = "$I" ]; then
+ exit "$to"
+ fi
+done