]> git.plutz.net Git - cgilite/blobdiff - storage.sh
escape spaces in stored data for easyer use with `read`
[cgilite] / storage.sh
index 1d8764be745b1c0168a7b56302fc42340be272de..8bd1b952dc54b1a9891772b2a03a01581f0a1d74 100755 (executable)
@@ -28,7 +28,7 @@ LOCK(){
     return 1
   fi
 
-  while ! mkdir "$lock"; do
+  while ! mkdir "$lock" 2>&-; do
     block="$(cat "$lock/pid" || printf 1)"
     if ! { ps -eo pid |grep -qwF "$block"; }; then
       printf 'Overriding stale lock: %s\n' "$lock" >&2
@@ -42,7 +42,7 @@ LOCK(){
     sleep 1
   done
   printf '%i\n' $$ >"${lock}/pid"
-  return 1
+  return 0
 }
 
 RELEASE(){
@@ -54,6 +54,7 @@ RELEASE(){
       printf '%i\n' $$ >"${lock}/pid"
       return 1
     fi
+    return 0
   else
     printf 'Refusing to release foreign lock: %s\n' "$lock" >&2
     return 1
@@ -67,6 +68,8 @@ STRING(){
     s;\n;\\n;g;
     s;\t;\\t;g;
     s;\r;\\r;g;
+    s;\+;\\+;g;
+    s; ;+;g;
   '
 }
 
@@ -76,7 +79,9 @@ UNSTRING(){
     s;((^|[^\\])(\\\\)*)\\n;\1\n;g;
     s;((^|[^\\])(\\\\)*)\\t;\1\t;g;
     s;((^|[^\\])(\\\\)*)\\r;\1\r;g;
+    s;((^|[^\\])(\\\\)*)\+;\1 ;g;
     tX;
+    s;((^|[^\\])(\\\\)*)\\\+;\1+;g;
     s;\\\\;\\;g;
   '
 }