| 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
|
|
|