From 5142b6921263f91402f6406603a9847c2b81631d Mon Sep 17 00:00:00 2001 From: rupa Date: Thu, 27 Jan 2011 14:22:57 -0500 Subject: [PATCH] use mktemp to prevent file clobbering (d'oh!). closes #9 --- z.sh | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/z.sh b/z.sh index c13e85b..9a6afde 100755 --- a/z.sh +++ b/z.sh @@ -32,6 +32,7 @@ z() { [ "$*" = "$HOME" ] && return # maintain the file + local tempfile="$(mktemp $datafile.XXXXXX)" || return awk -v path="$*" -v now="$(date +%s)" -F"|" ' BEGIN { rank[path] = 1 @@ -52,8 +53,8 @@ z() { for( i in rank ) print i "|" 0.9*rank[i] "|" time[i] # aging } else for( i in rank ) print i "|" rank[i] "|" time[i] } - ' "$datafile" 2>/dev/null > "$datafile.tmp" - mv -f "$datafile.tmp" "$datafile" + ' "$datafile" 2>/dev/null > "$tempfile" + mv -f "$tempfile" "$datafile" # tab completion elif [ "$1" = "--complete" ]; then @@ -92,7 +93,8 @@ z() { # no file yet [ -f "$datafile" ] || return - local cd="$(awk -v t="$(date +%s)" -v list="$list" -v typ="$typ" -v q="$fnd" -v tmpfl="$datafile.tmp" -F"|" ' + local tempfile="$(mktemp $datafile.XXXXXX)" || return + local cd="$(awk -v t="$(date +%s)" -v list="$list" -v typ="$typ" -v q="$fnd" -v tmpfl="$tempfile" -F"|" ' function frecent(rank, time) { dx = t-time if( dx < 3600 ) return rank*4 @@ -153,9 +155,9 @@ z() { } ' "$datafile")" if [ $? -gt 0 ]; then - rm -f "$datafile.tmp" + rm -f "$tempfile" else - mv -f "$datafile.tmp" "$datafile" + mv -f "$tempfile" "$datafile" [ "$cd" ] && cd "$cd" fi fi