Index: fusl/tools/install.sh |
diff --git a/fusl/tools/install.sh b/fusl/tools/install.sh |
new file mode 100755 |
index 0000000000000000000000000000000000000000..d913b60bf24fc0589a211bc4f83dd0ce9d3c983a |
--- /dev/null |
+++ b/fusl/tools/install.sh |
@@ -0,0 +1,64 @@ |
+#!/bin/sh |
+# |
+# This is an actually-safe install command which installs the new |
+# file atomically in the new location, rather than overwriting |
+# existing files. |
+# |
+ |
+usage() { |
+printf "usage: %s [-D] [-l] [-m mode] src dest\n" "$0" 1>&2 |
+exit 1 |
+} |
+ |
+mkdirp= |
+symlink= |
+mode=755 |
+ |
+while getopts Dlm: name ; do |
+case "$name" in |
+D) mkdirp=yes ;; |
+l) symlink=yes ;; |
+m) mode=$OPTARG ;; |
+?) usage ;; |
+esac |
+done |
+shift $(($OPTIND - 1)) |
+ |
+test "$#" -eq 2 || usage |
+src=$1 |
+dst=$2 |
+tmp="$dst.tmp.$$" |
+ |
+case "$dst" in |
+*/) printf "%s: %s ends in /\n", "$0" "$dst" 1>&2 ; exit 1 ;; |
+esac |
+ |
+set -C |
+set -e |
+ |
+if test "$mkdirp" ; then |
+umask 022 |
+case "$2" in |
+*/*) mkdir -p "${dst%/*}" ;; |
+esac |
+fi |
+ |
+trap 'rm -f "$tmp"' EXIT INT QUIT TERM HUP |
+ |
+umask 077 |
+ |
+if test "$symlink" ; then |
+ln -s "$1" "$tmp" |
+else |
+cat < "$1" > "$tmp" |
+chmod "$mode" "$tmp" |
+fi |
+ |
+mv -f "$tmp" "$2" |
+test -d "$2" && { |
+rm -f "$2/$tmp" |
+printf "%s: %s is a directory\n" "$0" "$dst" 1>&2 |
+exit 1 |
+} |
+ |
+exit 0 |