150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#! /bin/sh 250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# 350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# install - install a program, script, or datafile 450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# This comes from X11R5. 550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# 650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# Calling this script install-sh is preferred over install.sh, to prevent 750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# `make' implicit rules from creating a file called install from it 850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# when there is no Makefile. 950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# 1050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# This script is compatible with the BSD install script, but was written 1150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# from scratch. 1250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# 1350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 1450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 1550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# set DOITPROG to echo to test this script 1650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 1750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# Don't use :- since 4.3BSD and earlier shells don't like it. 1850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'odoit="${DOITPROG-}" 1950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 2050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 2150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# put in absolute paths if you don't have them in your path; or use env. vars. 2250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 2350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'omvprog="${MVPROG-mv}" 2450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ocpprog="${CPPROG-cp}" 2550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ochmodprog="${CHMODPROG-chmod}" 2650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ochownprog="${CHOWNPROG-chown}" 2750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ochgrpprog="${CHGRPPROG-chgrp}" 2850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ostripprog="${STRIPPROG-strip}" 2950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ormprog="${RMPROG-rm}" 3050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'omkdirprog="${MKDIRPROG-mkdir}" 3150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 3250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'otranformbasename="" 3350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'otransform_arg="" 3450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oinstcmd="$mvprog" 3550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ochmodcmd="$chmodprog 0755" 3650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ochowncmd="" 3750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ochgrpcmd="" 3850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ostripcmd="" 3950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ormcmd="$rmprog -f" 4050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'omvcmd="$mvprog" 4150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'osrc="" 4250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'odst="" 4350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'odir_arg="" 4450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 4550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'owhile [ x"$1" != x ]; do 4650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o case $1 in 4750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o -c) instcmd="$cpprog" 4850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o shift 4950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o continue;; 5050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 5150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o -d) dir_arg=true 5250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o shift 5350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o continue;; 5450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 5550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o -m) chmodcmd="$chmodprog $2" 5650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o shift 5750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o shift 5850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o continue;; 5950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 6050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o -o) chowncmd="$chownprog $2" 6150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o shift 6250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o shift 6350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o continue;; 6450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 6550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o -g) chgrpcmd="$chgrpprog $2" 6650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o shift 6750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o shift 6850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o continue;; 6950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 7050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o -s) stripcmd="$stripprog" 7150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o shift 7250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o continue;; 7350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 7450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o -t=*) transformarg=`echo $1 | sed 's/-t=//'` 7550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o shift 7650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o continue;; 7750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 7850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o -b=*) transformbasename=`echo $1 | sed 's/-b=//'` 7950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o shift 8050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o continue;; 8150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 8250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o *) if [ x"$src" = x ] 8350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o then 8450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o src=$1 8550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o else 8650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o # this colon is to work around a 386BSD /bin/sh bug 8750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o : 8850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o dst=$1 8950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o fi 9050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o shift 9150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o continue;; 9250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o esac 9350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'odone 9450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 9550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oif [ x"$src" = x ] 9650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'othen 9750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o echo "install: no input file specified" 9850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o exit 1 9950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oelse 10050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o true 10150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ofi 10250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 10350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oif [ x"$dir_arg" != x ]; then 10450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o dst=$src 10550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o src="" 10650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 10750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o if [ -d $dst ]; then 10850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o instcmd=: 10950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o else 11050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o instcmd=mkdir 11150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o fi 11250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oelse 11350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 11450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# Waiting for this to be detected by the "$instcmd $src $dsttmp" command 11550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# might cause directories to be created, which would be especially bad 11650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# if $src (and thus $dsttmp) contains '*'. 11750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 11850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o if [ -f $src -o -d $src ] 11950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o then 12050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o true 12150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o else 12250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o echo "install: $src does not exist" 12350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o exit 1 12450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o fi 12550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 12650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o if [ x"$dst" = x ] 12750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o then 12850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o echo "install: no destination specified" 12950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o exit 1 13050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o else 13150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o true 13250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o fi 13350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 13450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# If destination is a directory, append the input filename; if your system 13550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# does not like double slashes in filenames, you may need to add some logic 13650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 13750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o if [ -d $dst ] 13850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o then 13950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o dst="$dst"/`basename $src` 14050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o else 14150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o true 14250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o fi 14350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ofi 14450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 14550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o## this sed command emulates the dirname command 14650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'odstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` 14750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 14850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# Make sure that the destination directory exists. 14950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# this part is taken from Noah Friedman's mkinstalldirs script 15050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 15150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# Skip lots of stat calls in the usual case. 15250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oif [ ! -d "$dstdir" ]; then 15350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'odefaultIFS=' 15450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o' 15550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oIFS="${IFS-${defaultIFS}}" 15650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 15750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ooIFS="${IFS}" 15850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# Some sh's can't handle IFS=/ for some reason. 15950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oIFS='%' 16050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oset - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` 16150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oIFS="${oIFS}" 16250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 16350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'opathcomp='' 16450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 16550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'owhile [ $# -ne 0 ] ; do 16650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o pathcomp="${pathcomp}${1}" 16750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o shift 16850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 16950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o if [ ! -d "${pathcomp}" ] ; 17050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o then 17150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o $mkdirprog "${pathcomp}" 17250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o else 17350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o true 17450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o fi 17550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 17650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o pathcomp="${pathcomp}/" 17750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'odone 17850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ofi 17950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 18050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oif [ x"$dir_arg" != x ] 18150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'othen 18250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o $doit $instcmd $dst && 18350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 18450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && 18550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && 18650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && 18750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi 18850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oelse 18950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 19050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# If we're going to rename the final executable, determine the name now. 19150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 19250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o if [ x"$transformarg" = x ] 19350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o then 19450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o dstfile=`basename $dst` 19550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o else 19650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o dstfile=`basename $dst $transformbasename | 19750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o sed $transformarg`$transformbasename 19850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o fi 19950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 20050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# don't allow the sed command to completely eliminate the filename 20150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 20250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o if [ x"$dstfile" = x ] 20350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o then 20450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o dstfile=`basename $dst` 20550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o else 20650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o true 20750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o fi 20850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 20950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# Make a temp file name in the proper directory. 21050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 21150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o dsttmp=$dstdir/#inst.$$# 21250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 21350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# Move or copy the file name to the temp name 21450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 21550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o $doit $instcmd $src $dsttmp && 21650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 21750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o trap "rm -f ${dsttmp}" 0 && 21850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 21950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# and set any options; do chmod last to preserve setuid bits 22050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 22150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# If any of these fail, we abort the whole thing. If we want to 22250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# ignore errors from any of these, just make sure not to ignore 22350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# errors from the above "$doit $instcmd $src $dsttmp" command. 22450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 22550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && 22650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && 22750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && 22850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && 22950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 23050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# Now rename the file to the real destination. 23150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 23250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o $doit $rmcmd -f $dstdir/$dstfile && 23350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o $doit $mvcmd $dsttmp $dstdir/$dstfile 23450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 23550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ofi && 23650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 23750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 23850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oexit 0 239