summaryrefslogtreecommitdiff
path: root/Functions
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2010-02-26 12:09:20 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2010-02-26 12:09:20 +0000
commit07b6256d8ea03805dd8a24c184bf455ee31d6115 (patch)
tree98e16977e063db6d46c7b13e4b82c3cef3978dd9 /Functions
parentecc7dc91f639a5849ba2983786d932007f7a0773 (diff)
downloadzsh-07b6256d8ea03805dd8a24c184bf455ee31d6115.tar.gz
zsh-07b6256d8ea03805dd8a24c184bf455ee31d6115.zip
27756: add OS file locking to calendar
add errflag test to loop over fcntl()
Diffstat (limited to 'Functions')
-rw-r--r--Functions/Calendar/calendar13
-rw-r--r--Functions/Calendar/calendar_add14
-rw-r--r--Functions/Calendar/calendar_edit11
-rw-r--r--Functions/Calendar/calendar_sort12
4 files changed, 43 insertions, 7 deletions
diff --git a/Functions/Calendar/calendar b/Functions/Calendar/calendar
index f6316eb18..b87a14628 100644
--- a/Functions/Calendar/calendar
+++ b/Functions/Calendar/calendar
@@ -253,13 +253,21 @@ if (( verbose )); then
fi
fi
+# start of subshell for OS file locking
+(
# start of block for following always to clear up lockfiles.
+# Not needed but harmless if OS file locking is used.
{
if [[ -n $donefile ]]; then
# Attempt to lock both $donefile and $calendar.
# Don't lock $newfile; we've tried our best to make
# the name unique.
- calendar_lockfiles $calendar $donefile || return 1
+ if zmodload -F zsh/system b:zsystem && zsystem supports flock; then
+ zsystem flock $calendar
+ zsystem flock $donefile
+ else
+ calendar_lockfiles $calendar $donefile || exit 1
+ fi
fi
calendar_read $calendar
@@ -414,4 +422,5 @@ Old calendar left in $calendar.old." >&2
(( ${#lockfiles} )) && rm -f $lockfiles
}
-return $rstat
+exit $rstat
+)
diff --git a/Functions/Calendar/calendar_add b/Functions/Calendar/calendar_add
index 280e5f365..ac5caecd7 100644
--- a/Functions/Calendar/calendar_add
+++ b/Functions/Calendar/calendar_add
@@ -68,9 +68,18 @@ if [[ $addline = ${~uidpat} ]]; then
my_uid=${(U)match[1]}
fi
+# start of subshell for OS file locking
+(
# start of block for following always to clear up lockfiles.
+# Not needed but harmless if OS file locking is used.
{
- (( nolock )) || calendar_lockfiles $calendar || return 1
+ if (( ! nolock )); then
+ if zmodload -F zsh/system b:zsystem && zsystem supports flock; then
+ zsystem flock $calendar
+ else
+ calendar_lockfiles $calendar || exit 1
+ fi
+ fi
if [[ -f $calendar ]]; then
calendar_read $calendar
@@ -158,4 +167,5 @@ Old calendar left in $calendar.old." >&2
(( ${#lockfiles} )) && rm -f $lockfiles
}
-return $rstat
+exit $rstat
+)
diff --git a/Functions/Calendar/calendar_edit b/Functions/Calendar/calendar_edit
index e31decb76..e3ac5c39b 100644
--- a/Functions/Calendar/calendar_edit
+++ b/Functions/Calendar/calendar_edit
@@ -10,12 +10,21 @@ done
zstyle -s ':datetime:calendar:' calendar-file calendar || calendar=~/calendar
+# start of subshell for OS file locking
+(
+# start of block for following always to clear up lockfiles.
+# Not needed but harmless if OS file locking is used.
{
- calendar_lockfiles $calendar || return 1
+ if zmodload -F zsh/system b:zsystem && zsystem supports flock; then
+ zsystem flock $calendar
+ else
+ calendar_lockfiles $calendar || exit 1
+ fi
eval $editor \$calendar
} always {
(( ${#lockfiles} )) && rm -f $lockfiles
}
+)
(( cal_running )) && calendar -s
diff --git a/Functions/Calendar/calendar_sort b/Functions/Calendar/calendar_sort
index 7d346efc1..4911e34a2 100644
--- a/Functions/Calendar/calendar_sort
+++ b/Functions/Calendar/calendar_sort
@@ -11,9 +11,16 @@ integer i
# Read the calendar file from the calendar-file style
zstyle -s ':datetime:calendar:' calendar-file calendar || calendar=~/calendar
-# Start block for "always" to handle lockfile
+# start of subshell for OS file locking
+(
+# start of block for following always to clear up lockfiles.
+# Not needed but harmless if OS file locking is used.
{
- calendar_lockfiles $calendar || return 1
+ if zmodload -F zsh/system b:zsystem && zsystem supports flock; then
+ zsystem flock $calendar
+ else
+ calendar_lockfiles $calendar || exit 1
+ fi
new=$calendar.new.$$
calendar_read $calendar
@@ -65,3 +72,4 @@ Old calendar left in $calendar.old"
} always {
(( ${#lockfiles} )) && rm -rf $lockfiles
}
+)