]> git.plutz.net Git - serve0/blobdiff - cgilite/storage.sh
Merge commit 'b931bbd0c30907b9cc956d3707b26b449bf41f76'
[serve0] / cgilite / storage.sh
index c0f9076a2e9ebc02b8db3db9f9d52da12ba4ca46..17ea0d051eaf27233f8b5cd96f7396974c7a87f1 100755 (executable)
@@ -1,21 +1,18 @@
 #!/bin/sh
 
-# Copyright 2018, 2019 Paul Hänsch
-#
-# This is a file format helper, part of CGIlite.
+# Copyright 2018 - 2021 Paul Hänsch
 # 
-# CGIlite is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
 # 
-# CGIlite is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Affero General Public License for more details.
-# 
-# You should have received a copy of the GNU Affero General Public License
-# along with CGIlite.  If not, see <http://www.gnu.org/licenses/>. 
+# THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+# IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 [ -n "$include_storage" ] && return 0
 include_storage="$0"
@@ -25,9 +22,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 +35,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 +51,7 @@ LOCK(){
 }
 
 RELEASE(){
-  local lock block
-  lock="${1}.lock"
+  local lock="${1}.lock" block
 
   read block <"$lock"
   if [ "$block" = $$ ]; then
@@ -69,11 +63,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 +75,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 +91,7 @@ UNSTRING(){
     \\*) in="${in#\\}" ;;
     *) out="${out}${in%%[\\+]*}"; in="${in#"${in%%[\\+]*}"}" ;;
   esac; done
-  printf '%s' "$out"
+  printf '%s\n' "$out"
 }
 
 DBM() {