X-Git-Url: http://git.plutz.net/?a=blobdiff_plain;f=cgilite%2Fstorage.sh;h=17ea0d051eaf27233f8b5cd96f7396974c7a87f1;hb=c2ba4d6a5abd3d50bbb09d44b66b45369395af9c;hp=c0f9076a2e9ebc02b8db3db9f9d52da12ba4ca46;hpb=0b86ad6af8721216959da4b3194c4ab3208c1ada;p=serve0 diff --git a/cgilite/storage.sh b/cgilite/storage.sh index c0f9076..17ea0d0 100755 --- a/cgilite/storage.sh +++ b/cgilite/storage.sh @@ -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 . +# 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() {