1478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#! /bin/sh 2478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# 3478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# install - install a program, script, or datafile 4478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# This comes from X11R5 (mit/util/scripts/install.sh). 5478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# 6478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# Copyright 1991 by the Massachusetts Institute of Technology 7478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# 8478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# Permission to use, copy, modify, distribute, and sell this software and its 9478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# documentation for any purpose is hereby granted without fee, provided that 10478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# the above copyright notice appear in all copies and that both that 11478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# copyright notice and this permission notice appear in supporting 12478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# documentation, and that the name of M.I.T. not be used in advertising or 13478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# publicity pertaining to distribution of the software without specific, 14478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# written prior permission. M.I.T. makes no representations about the 15478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# suitability of this software for any purpose. It is provided "as is" 16478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# without express or implied warranty. 17478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# 18478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# Calling this script install-sh is preferred over install.sh, to prevent 19478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# `make' implicit rules from creating a file called install from it 20478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# when there is no Makefile. 21478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# 22478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# This script is compatible with the BSD install script, but was written 23478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# from scratch. It can only install one file at a time, a restriction 24478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# shared with many OS's install programs. 25478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 26478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 27478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# set DOITPROG to echo to test this script 28478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 29478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# Don't use :- since 4.3BSD and earlier shells don't like it. 30478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectdoit="${DOITPROG-}" 31478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 32478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 33478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# put in absolute paths if you don't have them in your path; or use env. vars. 34478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 35478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmvprog="${MVPROG-mv}" 36478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectcpprog="${CPPROG-cp}" 37478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchmodprog="${CHMODPROG-chmod}" 38478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchownprog="${CHOWNPROG-chown}" 39478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchgrpprog="${CHGRPPROG-chgrp}" 40478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstripprog="${STRIPPROG-strip}" 41478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectrmprog="${RMPROG-rm}" 42478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmkdirprog="${MKDIRPROG-mkdir}" 43478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 44478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttransformbasename="" 45478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttransform_arg="" 46478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectinstcmd="$mvprog" 47478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchmodcmd="$chmodprog 0755" 48478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchowncmd="" 49478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchgrpcmd="" 50478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstripcmd="" 51478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectrmcmd="$rmprog -f" 52478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmvcmd="$mvprog" 53478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectsrc="" 54478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectdst="" 55478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectdir_arg="" 56478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 57478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectwhile [ x"$1" != x ]; do 58478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project case $1 in 59478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project -c) instcmd="$cpprog" 60478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project shift 61478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project continue;; 62478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 63478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project -d) dir_arg=true 64478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project shift 65478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project continue;; 66478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 67478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project -m) chmodcmd="$chmodprog $2" 68478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project shift 69478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project shift 70478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project continue;; 71478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 72478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project -o) chowncmd="$chownprog $2" 73478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project shift 74478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project shift 75478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project continue;; 76478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 77478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project -g) chgrpcmd="$chgrpprog $2" 78478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project shift 79478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project shift 80478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project continue;; 81478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 82478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project -s) stripcmd="$stripprog" 83478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project shift 84478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project continue;; 85478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 86478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project -t=*) transformarg=`echo $1 | sed 's/-t=//'` 87478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project shift 88478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project continue;; 89478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 90478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project -b=*) transformbasename=`echo $1 | sed 's/-b=//'` 91478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project shift 92478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project continue;; 93478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 94478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *) if [ x"$src" = x ] 95478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project then 96478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project src=$1 97478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project else 98478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project # this colon is to work around a 386BSD /bin/sh bug 99478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project : 100478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project dst=$1 101478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project fi 102478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project shift 103478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project continue;; 104478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project esac 105478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectdone 106478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 107478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectif [ x"$src" = x ] 108478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectthen 109478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project echo "install: no input file specified" 110478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project exit 1 111478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectelse 112478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project true 113478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectfi 114478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 115478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectif [ x"$dir_arg" != x ]; then 116478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project dst=$src 117478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project src="" 118478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 119478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if [ -d $dst ]; then 120478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project instcmd=: 121478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project else 122478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project instcmd=mkdir 123478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project fi 124478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectelse 125478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 126478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# Waiting for this to be detected by the "$instcmd $src $dsttmp" command 127478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# might cause directories to be created, which would be especially bad 128478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# if $src (and thus $dsttmp) contains '*'. 129478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 130478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if [ -f $src -o -d $src ] 131478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project then 132478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project true 133478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project else 134478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project echo "install: $src does not exist" 135478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project exit 1 136478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project fi 137478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 138478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if [ x"$dst" = x ] 139478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project then 140478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project echo "install: no destination specified" 141478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project exit 1 142478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project else 143478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project true 144478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project fi 145478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 146478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# If destination is a directory, append the input filename; if your system 147478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# does not like double slashes in filenames, you may need to add some logic 148478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 149478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if [ -d $dst ] 150478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project then 151478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project dst="$dst"/`basename $src` 152478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project else 153478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project true 154478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project fi 155478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectfi 156478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 157478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project## this sed command emulates the dirname command 158478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectdstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` 159478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 160478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# Make sure that the destination directory exists. 161478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# this part is taken from Noah Friedman's mkinstalldirs script 162478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 163478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# Skip lots of stat calls in the usual case. 164478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectif [ ! -d "$dstdir" ]; then 165478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectdefaultIFS=' 166478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project' 167478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectIFS="${IFS-${defaultIFS}}" 168478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 169478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectoIFS="${IFS}" 170478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# Some sh's can't handle IFS=/ for some reason. 171478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectIFS='%' 172478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectset - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` 173478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectIFS="${oIFS}" 174478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 175478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpathcomp='' 176478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 177478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectwhile [ $# -ne 0 ] ; do 178478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project pathcomp="${pathcomp}${1}" 179478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project shift 180478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 181478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if [ ! -d "${pathcomp}" ] ; 182478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project then 183478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $mkdirprog "${pathcomp}" 184478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project else 185478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project true 186478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project fi 187478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 188478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project pathcomp="${pathcomp}/" 189478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectdone 190478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectfi 191478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 192478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectif [ x"$dir_arg" != x ] 193478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectthen 194478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $doit $instcmd $dst && 195478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 196478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && 197478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && 198478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && 199478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi 200478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectelse 201478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 202478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# If we're going to rename the final executable, determine the name now. 203478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 204478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if [ x"$transformarg" = x ] 205478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project then 206478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project dstfile=`basename $dst` 207478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project else 208478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project dstfile=`basename $dst $transformbasename | 209478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project sed $transformarg`$transformbasename 210478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project fi 211478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 212478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# don't allow the sed command to completely eliminate the filename 213478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 214478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if [ x"$dstfile" = x ] 215478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project then 216478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project dstfile=`basename $dst` 217478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project else 218478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project true 219478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project fi 220478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 221478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# Make a temp file name in the proper directory. 222478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 223478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project dsttmp=$dstdir/#inst.$$# 224478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 225478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# Move or copy the file name to the temp name 226478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 227478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $doit $instcmd $src $dsttmp && 228478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 229478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project trap "rm -f ${dsttmp}" 0 && 230478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 231478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# and set any options; do chmod last to preserve setuid bits 232478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 233478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# If any of these fail, we abort the whole thing. If we want to 234478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# ignore errors from any of these, just make sure not to ignore 235478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# errors from the above "$doit $instcmd $src $dsttmp" command. 236478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 237478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && 238478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && 239478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && 240478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && 241478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 242478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# Now rename the file to the real destination. 243478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 244478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $doit $rmcmd -f $dstdir/$dstfile && 245478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $doit $mvcmd $dsttmp $dstdir/$dstfile 246478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 247478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectfi && 248478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 249478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 250478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectexit 0 251