diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2017-09-23 11:03:34 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2017-09-23 11:11:53 -0700 |
commit | 48463bb2f8bdbdd77961888514b34b0579da8354 (patch) | |
tree | 16f3ca19703ac8e14f91f90bed54fba3dce6447c | |
parent | a2de0200664edbd93781ff2a19a878dbe6732f09 (diff) | |
download | automake-48463bb2f8bdbdd77961888514b34b0579da8354.tar.gz |
install-sh: do not assume / = //
* lib/install-sh: Do not append / to destination
directory if it already ends in /. This supports
a destination directory of // on hosts where / and //
are distinct directories, as POSIX allows.
-rwxr-xr-x | lib/install-sh | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/lib/install-sh b/lib/install-sh index 0360b79e7..ac159ceda 100755 --- a/lib/install-sh +++ b/lib/install-sh @@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2016-01-11.22; # UTC +scriptversion=2017-09-23.17; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -271,15 +271,18 @@ do fi dst=$dst_arg - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. + # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst - dst=$dstdir/`basename "$src"` + dstbase=`basename "$src"` + case $dst in + */) dst=$dst$dstbase;; + *) dst=$dst/$dstbase;; + esac dstdir_status=0 else dstdir=`dirname "$dst"` @@ -288,6 +291,11 @@ do fi fi + case $dstdir in + */) dstdirslash=$dstdir;; + *) dstdirslash=$dstdir/;; + esac + obsolete_mkdir_used=false if test $dstdir_status != 0; then @@ -427,8 +435,8 @@ do else # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ + dsttmp=${dstdirslash}_inst.$$_ + rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 |