]> git.plutz.net Git - serve0/blobdiff - cgilite/storage.sh
Merge commit '46cfaab0ad63961e6d918ae5df596814fb344b4e'
[serve0] / cgilite / storage.sh
index c0f9076a2e9ebc02b8db3db9f9d52da12ba4ca46..22e6accbcba7cddd75bbaec0235a174b4aa53bd3 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-# Copyright 2018, 2019 Paul Hänsch
+# Copyright 2018, 2019, 2021 Paul Hänsch
 #
 # This is a file format helper, part of CGIlite.
 # 
@@ -25,9 +25,7 @@ BR='
 '
 
 LOCK(){
-  local lock timeout block
-  lock="${1}.lock"
-  timeout="${2-20}"
+  local lock="${1}.lock" timeout="${2-20}" block
 
   if [ \! -w "${lock%/*}" ] || [ -e "$lock" -a \! -f "$lock" ]; then
     debug "Impossible to get lock: $lock"
@@ -40,14 +38,14 @@ LOCK(){
     if [ "$block" = $$ ]; then
       return 0
     elif ! { ps -eo pid |grep -qwF "$block"; }; then
-      debug "Overriding stale lock: $lock"
+      debug "Trying to override stale lock: $lock"
       if LOCK "$lock" 1; then
         rm -- "$lock"
         RELEASE "$lock"
       fi
     else
       timeout=$((timeout - 1))
-      sleep 1
+      [ $timeout -gt 0 ] && sleep 1
     fi
   done
 
@@ -56,8 +54,7 @@ LOCK(){
 }
 
 RELEASE(){
-  local lock block
-  lock="${1}.lock"
+  local lock="${1}.lock" block
 
   read block <"$lock"
   if [ "$block" = $$ ]; then
@@ -69,11 +66,6 @@ RELEASE(){
   fi
 }
 
-# STRING='
-#   s;\\;\\\\;g; s;\t;\\t;g;
-#   s;\n;\\n;g;  s;\r;\\r;g;
-#   s;\+;\\+;g;  s; ;+;g;
-# '
 STRING(){
   local in out=''
   [ $# -gt 0 ] && in="$*" || in="$(cat)"
@@ -86,19 +78,9 @@ STRING(){
     " "*) out="${out}+"; in="${in# }" ;;
     *) out="${out}${in%%[\\${CR}${BR}  + ]*}"; in="${in#"${in%%[\\${BR}${CR}   + ]*}"}" ;;
   esac; done
-  printf '%s' "$out"
+  printf '%s' "${out:-\\}"
 }
 
-UNSTRING='
-  :UNSTRING_X
-  s;((^|[^\\])(\\\\)*)\\n;\1\n;g;
-  s;((^|[^\\])(\\\\)*)\\t;\1\t;g;
-  s;((^|[^\\])(\\\\)*)\\r;\1\r;g;
-  s;((^|[^\\])(\\\\)*)\+;\1 ;g;
-  tUNSTRING_X;
-  s;((^|[^\\])(\\\\)*)\\\+;\1+;g;
-  s;\\\\;\\;g;
-'
 UNSTRING(){
   local in out=''
   [ $# -gt 0 ] && in="$*" || in="$(cat)"
@@ -112,7 +94,7 @@ UNSTRING(){
     \\*) in="${in#\\}" ;;
     *) out="${out}${in%%[\\+]*}"; in="${in#"${in%%[\\+]*}"}" ;;
   esac; done
-  printf '%s' "$out"
+  printf '%s\n' "$out"
 }
 
 DBM() {