mirror of
				https://github.com/pbatard/rufus.git
				synced 2024-08-14 23:57:05 +00:00 
			
		
		
		
	Compare commits
	
		
			2 commits
		
	
	
		
			eeca1f279c
			...
			e495c691ea
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | e495c691ea | ||
|  | c28f9bc491 | 
					 29 changed files with 327 additions and 288 deletions
				
			
		
							
								
								
									
										1
									
								
								.gitattributes
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitattributes
									
										
									
									
										vendored
									
									
								
							|  | @ -4,6 +4,7 @@ | ||||||
| *.in            eol=lf | *.in            eol=lf | ||||||
| *.m4            eol=lf | *.m4            eol=lf | ||||||
| missing         eol=lf | missing         eol=lf | ||||||
|  | compile         eol=lf | ||||||
| configure       eol=lf | configure       eol=lf | ||||||
| install-sh      eol=lf | install-sh      eol=lf | ||||||
| *.sln           eol=crlf | *.sln           eol=crlf | ||||||
|  |  | ||||||
							
								
								
									
										1
									
								
								.github/workflows/mingw.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/workflows/mingw.yml
									
										
									
									
										vendored
									
									
								
							|  | @ -48,6 +48,7 @@ jobs: | ||||||
|         install: >- |         install: >- | ||||||
|           mingw-w64-${{ matrix.env }}-toolchain |           mingw-w64-${{ matrix.env }}-toolchain | ||||||
|           base-devel |           base-devel | ||||||
|  |           autotools | ||||||
|           git |           git | ||||||
|           upx |           upx | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										258
									
								
								install-sh
									
										
									
									
									
								
							
							
						
						
									
										258
									
								
								install-sh
									
										
									
									
									
								
							|  | @ -1,7 +1,7 @@ | ||||||
| #!/bin/sh | #!/bin/sh | ||||||
| # install - install a program, script, or datafile | # install - install a program, script, or datafile | ||||||
| 
 | 
 | ||||||
| scriptversion=2009-04-28.21; # UTC | scriptversion=2020-11-14.01; # UTC | ||||||
| 
 | 
 | ||||||
| # This originates from X11R5 (mit/util/scripts/install.sh), which was | # This originates from X11R5 (mit/util/scripts/install.sh), which was | ||||||
| # later released in X11R6 (xc/config/util/install.sh) with the | # later released in X11R6 (xc/config/util/install.sh) with the | ||||||
|  | @ -35,25 +35,21 @@ scriptversion=2009-04-28.21; # UTC | ||||||
| # FSF changes to this file are in the public domain. | # FSF changes to this file are in the public domain. | ||||||
| # | # | ||||||
| # Calling this script install-sh is preferred over install.sh, to prevent | # Calling this script install-sh is preferred over install.sh, to prevent | ||||||
| # `make' implicit rules from creating a file called install from it | # 'make' implicit rules from creating a file called install from it | ||||||
| # when there is no Makefile. | # when there is no Makefile. | ||||||
| # | # | ||||||
| # This script is compatible with the BSD install script, but was written | # This script is compatible with the BSD install script, but was written | ||||||
| # from scratch. | # from scratch. | ||||||
| 
 | 
 | ||||||
|  | tab='	' | ||||||
| nl=' | nl=' | ||||||
| ' | ' | ||||||
| IFS=" ""	$nl" | IFS=" $tab$nl" | ||||||
| 
 | 
 | ||||||
| # set DOITPROG to echo to test this script | # Set DOITPROG to "echo" to test this script. | ||||||
| 
 | 
 | ||||||
| # Don't use :- since 4.3BSD and earlier shells don't like it. |  | ||||||
| doit=${DOITPROG-} | doit=${DOITPROG-} | ||||||
| if test -z "$doit"; then | doit_exec=${doit:-exec} | ||||||
|   doit_exec=exec |  | ||||||
| else |  | ||||||
|   doit_exec=$doit |  | ||||||
| fi |  | ||||||
| 
 | 
 | ||||||
| # Put in absolute file names if you don't have them in your path; | # Put in absolute file names if you don't have them in your path; | ||||||
| # or use environment vars. | # or use environment vars. | ||||||
|  | @ -68,22 +64,16 @@ mvprog=${MVPROG-mv} | ||||||
| rmprog=${RMPROG-rm} | rmprog=${RMPROG-rm} | ||||||
| stripprog=${STRIPPROG-strip} | stripprog=${STRIPPROG-strip} | ||||||
| 
 | 
 | ||||||
| posix_glob='?' |  | ||||||
| initialize_posix_glob=' |  | ||||||
|   test "$posix_glob" != "?" || { |  | ||||||
|     if (set -f) 2>/dev/null; then |  | ||||||
|       posix_glob= |  | ||||||
|     else |  | ||||||
|       posix_glob=: |  | ||||||
|     fi |  | ||||||
|   } |  | ||||||
| ' |  | ||||||
| 
 |  | ||||||
| posix_mkdir= | posix_mkdir= | ||||||
| 
 | 
 | ||||||
| # Desired mode of installed file. | # Desired mode of installed file. | ||||||
| mode=0755 | mode=0755 | ||||||
| 
 | 
 | ||||||
|  | # Create dirs (including intermediate dirs) using mode 755. | ||||||
|  | # This is like GNU 'install' as of coreutils 8.32 (2020). | ||||||
|  | mkdir_umask=22 | ||||||
|  | 
 | ||||||
|  | backupsuffix= | ||||||
| chgrpcmd= | chgrpcmd= | ||||||
| chmodcmd=$chmodprog | chmodcmd=$chmodprog | ||||||
| chowncmd= | chowncmd= | ||||||
|  | @ -97,7 +87,7 @@ dir_arg= | ||||||
| dst_arg= | dst_arg= | ||||||
| 
 | 
 | ||||||
| copy_on_change=false | copy_on_change=false | ||||||
| no_target_directory= | is_target_a_directory=possibly | ||||||
| 
 | 
 | ||||||
| usage="\ | usage="\ | ||||||
| Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE | Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE | ||||||
|  | @ -114,18 +104,28 @@ Options: | ||||||
|      --version  display version info and exit. |      --version  display version info and exit. | ||||||
| 
 | 
 | ||||||
|   -c            (ignored) |   -c            (ignored) | ||||||
|   -C            install only if different (preserve the last data modification time) |   -C            install only if different (preserve data modification time) | ||||||
|   -d            create directories instead of installing files. |   -d            create directories instead of installing files. | ||||||
|   -g GROUP      $chgrpprog installed files to GROUP. |   -g GROUP      $chgrpprog installed files to GROUP. | ||||||
|   -m MODE       $chmodprog installed files to MODE. |   -m MODE       $chmodprog installed files to MODE. | ||||||
|   -o USER       $chownprog installed files to USER. |   -o USER       $chownprog installed files to USER. | ||||||
|  |   -p            pass -p to $cpprog. | ||||||
|   -s            $stripprog installed files. |   -s            $stripprog installed files. | ||||||
|  |   -S SUFFIX     attempt to back up existing files, with suffix SUFFIX. | ||||||
|   -t DIRECTORY  install into DIRECTORY. |   -t DIRECTORY  install into DIRECTORY. | ||||||
|   -T            report an error if DSTFILE is a directory. |   -T            report an error if DSTFILE is a directory. | ||||||
| 
 | 
 | ||||||
| Environment variables override the default commands: | Environment variables override the default commands: | ||||||
|   CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG |   CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG | ||||||
|   RMPROG STRIPPROG |   RMPROG STRIPPROG | ||||||
|  | 
 | ||||||
|  | By default, rm is invoked with -f; when overridden with RMPROG, | ||||||
|  | it's up to you to specify -f if you want it. | ||||||
|  | 
 | ||||||
|  | If -S is not specified, no backups are attempted. | ||||||
|  | 
 | ||||||
|  | Email bug reports to bug-automake@gnu.org. | ||||||
|  | Automake home page: https://www.gnu.org/software/automake/ | ||||||
| " | " | ||||||
| 
 | 
 | ||||||
| while test $# -ne 0; do | while test $# -ne 0; do | ||||||
|  | @ -143,8 +143,7 @@ while test $# -ne 0; do | ||||||
| 
 | 
 | ||||||
|     -m) mode=$2 |     -m) mode=$2 | ||||||
|         case $mode in |         case $mode in | ||||||
| 	  *' '* | *'	'* | *' |           *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) | ||||||
| '*	  | *'*'* | *'?'* | *'['*) |  | ||||||
|             echo "$0: invalid mode: $mode" >&2 |             echo "$0: invalid mode: $mode" >&2 | ||||||
|             exit 1;; |             exit 1;; | ||||||
|         esac |         esac | ||||||
|  | @ -153,12 +152,23 @@ while test $# -ne 0; do | ||||||
|     -o) chowncmd="$chownprog $2" |     -o) chowncmd="$chownprog $2" | ||||||
|         shift;; |         shift;; | ||||||
| 
 | 
 | ||||||
|  |     -p) cpprog="$cpprog -p";; | ||||||
|  | 
 | ||||||
|     -s) stripcmd=$stripprog;; |     -s) stripcmd=$stripprog;; | ||||||
| 
 | 
 | ||||||
|     -t) dst_arg=$2 |     -S) backupsuffix="$2" | ||||||
|         shift;; |         shift;; | ||||||
| 
 | 
 | ||||||
|     -T) no_target_directory=true;; |     -t) | ||||||
|  |         is_target_a_directory=always | ||||||
|  |         dst_arg=$2 | ||||||
|  |         # Protect names problematic for 'test' and other utilities. | ||||||
|  |         case $dst_arg in | ||||||
|  |           -* | [=\(\)!]) dst_arg=./$dst_arg;; | ||||||
|  |         esac | ||||||
|  |         shift;; | ||||||
|  | 
 | ||||||
|  |     -T) is_target_a_directory=never;; | ||||||
| 
 | 
 | ||||||
|     --version) echo "$0 $scriptversion"; exit $?;; |     --version) echo "$0 $scriptversion"; exit $?;; | ||||||
| 
 | 
 | ||||||
|  | @ -173,6 +183,16 @@ while test $# -ne 0; do | ||||||
|   shift |   shift | ||||||
| done | done | ||||||
| 
 | 
 | ||||||
|  | # We allow the use of options -d and -T together, by making -d | ||||||
|  | # take the precedence; this is for compatibility with GNU install. | ||||||
|  | 
 | ||||||
|  | if test -n "$dir_arg"; then | ||||||
|  |   if test -n "$dst_arg"; then | ||||||
|  |     echo "$0: target directory not allowed when installing a directory." >&2 | ||||||
|  |     exit 1 | ||||||
|  |   fi | ||||||
|  | fi | ||||||
|  | 
 | ||||||
| if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then | if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then | ||||||
|   # When -d is used, all remaining arguments are directories to create. |   # When -d is used, all remaining arguments are directories to create. | ||||||
|   # When -t is used, the destination is already specified. |   # When -t is used, the destination is already specified. | ||||||
|  | @ -186,6 +206,10 @@ if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then | ||||||
|     fi |     fi | ||||||
|     shift # arg |     shift # arg | ||||||
|     dst_arg=$arg |     dst_arg=$arg | ||||||
|  |     # Protect names problematic for 'test' and other utilities. | ||||||
|  |     case $dst_arg in | ||||||
|  |       -* | [=\(\)!]) dst_arg=./$dst_arg;; | ||||||
|  |     esac | ||||||
|   done |   done | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
|  | @ -194,13 +218,26 @@ if test $# -eq 0; then | ||||||
|     echo "$0: no input file specified." >&2 |     echo "$0: no input file specified." >&2 | ||||||
|     exit 1 |     exit 1 | ||||||
|   fi |   fi | ||||||
|   # It's OK to call `install-sh -d' without argument. |   # It's OK to call 'install-sh -d' without argument. | ||||||
|   # This can happen when creating conditional directories. |   # This can happen when creating conditional directories. | ||||||
|   exit 0 |   exit 0 | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| if test -z "$dir_arg"; then | if test -z "$dir_arg"; then | ||||||
|   trap '(exit $?); exit' 1 2 13 15 |   if test $# -gt 1 || test "$is_target_a_directory" = always; then | ||||||
|  |     if test ! -d "$dst_arg"; then | ||||||
|  |       echo "$0: $dst_arg: Is not a directory." >&2 | ||||||
|  |       exit 1 | ||||||
|  |     fi | ||||||
|  |   fi | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | if test -z "$dir_arg"; then | ||||||
|  |   do_exit='(exit $ret); exit $ret' | ||||||
|  |   trap "ret=129; $do_exit" 1 | ||||||
|  |   trap "ret=130; $do_exit" 2 | ||||||
|  |   trap "ret=141; $do_exit" 13 | ||||||
|  |   trap "ret=143; $do_exit" 15 | ||||||
| 
 | 
 | ||||||
|   # Set umask so as not to create temps with too-generous modes. |   # Set umask so as not to create temps with too-generous modes. | ||||||
|   # However, 'strip' requires both read and write access to temps. |   # However, 'strip' requires both read and write access to temps. | ||||||
|  | @ -228,9 +265,9 @@ fi | ||||||
| 
 | 
 | ||||||
| for src | for src | ||||||
| do | do | ||||||
|   # Protect names starting with `-'. |   # Protect names problematic for 'test' and other utilities. | ||||||
|   case $src in |   case $src in | ||||||
|     -*) src=./$src;; |     -* | [=\(\)!]) src=./$src;; | ||||||
|   esac |   esac | ||||||
| 
 | 
 | ||||||
|   if test -n "$dir_arg"; then |   if test -n "$dir_arg"; then | ||||||
|  | @ -238,6 +275,10 @@ do | ||||||
|     dstdir=$dst |     dstdir=$dst | ||||||
|     test -d "$dstdir" |     test -d "$dstdir" | ||||||
|     dstdir_status=$? |     dstdir_status=$? | ||||||
|  |     # Don't chown directories that already exist. | ||||||
|  |     if test $dstdir_status = 0; then | ||||||
|  |       chowncmd="" | ||||||
|  |     fi | ||||||
|   else |   else | ||||||
| 
 | 
 | ||||||
|     # Waiting for this to be detected by the "$cpprog $src $dsttmp" command |     # Waiting for this to be detected by the "$cpprog $src $dsttmp" command | ||||||
|  | @ -252,77 +293,38 @@ do | ||||||
|       echo "$0: no destination specified." >&2 |       echo "$0: no destination specified." >&2 | ||||||
|       exit 1 |       exit 1 | ||||||
|     fi |     fi | ||||||
| 
 |  | ||||||
|     dst=$dst_arg |     dst=$dst_arg | ||||||
|     # Protect names starting with `-'. |  | ||||||
|     case $dst in |  | ||||||
|       -*) dst=./$dst;; |  | ||||||
|     esac |  | ||||||
| 
 | 
 | ||||||
|     # If destination is a directory, append the input filename; won't work |     # If destination is a directory, append the input filename. | ||||||
|     # if double slashes aren't ignored. |  | ||||||
|     if test -d "$dst"; then |     if test -d "$dst"; then | ||||||
|       if test -n "$no_target_directory"; then |       if test "$is_target_a_directory" = never; then | ||||||
|         echo "$0: $dst_arg: Is a directory" >&2 |         echo "$0: $dst_arg: Is a directory" >&2 | ||||||
|         exit 1 |         exit 1 | ||||||
|       fi |       fi | ||||||
|       dstdir=$dst |       dstdir=$dst | ||||||
|       dst=$dstdir/`basename "$src"` |       dstbase=`basename "$src"` | ||||||
|  |       case $dst in | ||||||
|  | 	*/) dst=$dst$dstbase;; | ||||||
|  | 	*)  dst=$dst/$dstbase;; | ||||||
|  |       esac | ||||||
|       dstdir_status=0 |       dstdir_status=0 | ||||||
|     else |     else | ||||||
|       # Prefer dirname, but fall back on a substitute if dirname fails. |       dstdir=`dirname "$dst"` | ||||||
|       dstdir=` |  | ||||||
| 	(dirname "$dst") 2>/dev/null || |  | ||||||
| 	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ |  | ||||||
| 	     X"$dst" : 'X\(//\)[^/]' \| \ |  | ||||||
| 	     X"$dst" : 'X\(//\)$' \| \ |  | ||||||
| 	     X"$dst" : 'X\(/\)' \| . 2>/dev/null || |  | ||||||
| 	echo X"$dst" | |  | ||||||
| 	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ |  | ||||||
| 		   s//\1/ |  | ||||||
| 		   q |  | ||||||
| 		 } |  | ||||||
| 		 /^X\(\/\/\)[^/].*/{ |  | ||||||
| 		   s//\1/ |  | ||||||
| 		   q |  | ||||||
| 		 } |  | ||||||
| 		 /^X\(\/\/\)$/{ |  | ||||||
| 		   s//\1/ |  | ||||||
| 		   q |  | ||||||
| 		 } |  | ||||||
| 		 /^X\(\/\).*/{ |  | ||||||
| 		   s//\1/ |  | ||||||
| 		   q |  | ||||||
| 		 } |  | ||||||
| 		 s/.*/./; q' |  | ||||||
|       ` |  | ||||||
| 
 |  | ||||||
|       test -d "$dstdir" |       test -d "$dstdir" | ||||||
|       dstdir_status=$? |       dstdir_status=$? | ||||||
|     fi |     fi | ||||||
|   fi |   fi | ||||||
| 
 | 
 | ||||||
|  |   case $dstdir in | ||||||
|  |     */) dstdirslash=$dstdir;; | ||||||
|  |     *)  dstdirslash=$dstdir/;; | ||||||
|  |   esac | ||||||
|  | 
 | ||||||
|   obsolete_mkdir_used=false |   obsolete_mkdir_used=false | ||||||
| 
 | 
 | ||||||
|   if test $dstdir_status != 0; then |   if test $dstdir_status != 0; then | ||||||
|     case $posix_mkdir in |     case $posix_mkdir in | ||||||
|       '') |       '') | ||||||
| 	# Create intermediate dirs using mode 755 as modified by the umask. |  | ||||||
| 	# This is like FreeBSD 'install' as of 1997-10-28. |  | ||||||
| 	umask=`umask` |  | ||||||
| 	case $stripcmd.$umask in |  | ||||||
| 	  # Optimize common cases. |  | ||||||
| 	  *[2367][2367]) mkdir_umask=$umask;; |  | ||||||
| 	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; |  | ||||||
| 
 |  | ||||||
| 	  *[0-7]) |  | ||||||
| 	    mkdir_umask=`expr $umask + 22 \ |  | ||||||
| 	      - $umask % 100 % 40 + $umask % 20 \ |  | ||||||
| 	      - $umask % 10 % 4 + $umask % 2 |  | ||||||
| 	    `;; |  | ||||||
| 	  *) mkdir_umask=$umask,go-w;; |  | ||||||
| 	esac |  | ||||||
| 
 |  | ||||||
|         # With -d, create the new directory with the user-specified mode. |         # With -d, create the new directory with the user-specified mode. | ||||||
|         # Otherwise, rely on $mkdir_umask. |         # Otherwise, rely on $mkdir_umask. | ||||||
|         if test -n "$dir_arg"; then |         if test -n "$dir_arg"; then | ||||||
|  | @ -332,43 +334,49 @@ do | ||||||
|         fi |         fi | ||||||
| 
 | 
 | ||||||
|         posix_mkdir=false |         posix_mkdir=false | ||||||
| 	case $umask in | 	# The $RANDOM variable is not portable (e.g., dash).  Use it | ||||||
| 	  *[123567][0-7][0-7]) | 	# here however when possible just to lower collision chance. | ||||||
| 	    # POSIX mkdir -p sets u+wx bits regardless of umask, which |  | ||||||
| 	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0. |  | ||||||
| 	    ;; |  | ||||||
| 	  *) |  | ||||||
| 	tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ | 	tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ | ||||||
| 	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 |  | ||||||
| 
 | 
 | ||||||
|  | 	trap ' | ||||||
|  | 	  ret=$? | ||||||
|  | 	  rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null | ||||||
|  | 	  exit $ret | ||||||
|  | 	' 0 | ||||||
|  | 
 | ||||||
|  | 	# Because "mkdir -p" follows existing symlinks and we likely work | ||||||
|  | 	# directly in world-writeable /tmp, make sure that the '$tmpdir' | ||||||
|  | 	# directory is successfully created first before we actually test | ||||||
|  | 	# 'mkdir -p'. | ||||||
| 	if (umask $mkdir_umask && | 	if (umask $mkdir_umask && | ||||||
| 		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 | 	    $mkdirprog $mkdir_mode "$tmpdir" && | ||||||
|  | 	    exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 | ||||||
| 	then | 	then | ||||||
| 	  if test -z "$dir_arg" || { | 	  if test -z "$dir_arg" || { | ||||||
| 	       # Check for POSIX incompatibilities with -m. | 	       # Check for POSIX incompatibilities with -m. | ||||||
| 	       # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or | 	       # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or | ||||||
| 		   # other-writeable bit of parent directory when it shouldn't. | 	       # other-writable bit of parent directory when it shouldn't. | ||||||
| 	       # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. | 	       # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. | ||||||
| 		   ls_ld_tmpdir=`ls -ld "$tmpdir"` | 	       test_tmpdir="$tmpdir/a" | ||||||
|  | 	       ls_ld_tmpdir=`ls -ld "$test_tmpdir"` | ||||||
| 	       case $ls_ld_tmpdir in | 	       case $ls_ld_tmpdir in | ||||||
| 		 d????-?r-*) different_mode=700;; | 		 d????-?r-*) different_mode=700;; | ||||||
| 		 d????-?--*) different_mode=755;; | 		 d????-?--*) different_mode=755;; | ||||||
| 		 *) false;; | 		 *) false;; | ||||||
| 	       esac && | 	       esac && | ||||||
| 		   $mkdirprog -m$different_mode -p -- "$tmpdir" && { | 	       $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { | ||||||
| 		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"` | 		 ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` | ||||||
| 		 test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" | 		 test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" | ||||||
| 	       } | 	       } | ||||||
| 	     } | 	     } | ||||||
| 	  then posix_mkdir=: | 	  then posix_mkdir=: | ||||||
| 	  fi | 	  fi | ||||||
| 	      rmdir "$tmpdir/d" "$tmpdir" | 	  rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" | ||||||
| 	else | 	else | ||||||
| 	  # Remove any dirs left behind by ancient mkdir implementations. | 	  # Remove any dirs left behind by ancient mkdir implementations. | ||||||
| 	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null | 	  rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null | ||||||
| 	fi | 	fi | ||||||
| 	trap '' 0;; | 	trap '' 0;; | ||||||
| 	esac;; |  | ||||||
|     esac |     esac | ||||||
| 
 | 
 | ||||||
|     if |     if | ||||||
|  | @ -379,38 +387,36 @@ do | ||||||
|     then : |     then : | ||||||
|     else |     else | ||||||
| 
 | 
 | ||||||
|       # The umask is ridiculous, or mkdir does not conform to POSIX, |       # mkdir does not conform to POSIX, | ||||||
|       # or it failed possibly due to a race condition.  Create the |       # or it failed possibly due to a race condition.  Create the | ||||||
|       # directory the slow way, step by step, checking for races as we go. |       # directory the slow way, step by step, checking for races as we go. | ||||||
| 
 | 
 | ||||||
|       case $dstdir in |       case $dstdir in | ||||||
|         /*) prefix='/';; |         /*) prefix='/';; | ||||||
| 	-*) prefix='./';; |         [-=\(\)!]*) prefix='./';; | ||||||
|         *)  prefix='';; |         *)  prefix='';; | ||||||
|       esac |       esac | ||||||
| 
 | 
 | ||||||
|       eval "$initialize_posix_glob" |  | ||||||
| 
 |  | ||||||
|       oIFS=$IFS |       oIFS=$IFS | ||||||
|       IFS=/ |       IFS=/ | ||||||
|       $posix_glob set -f |       set -f | ||||||
|       set fnord $dstdir |       set fnord $dstdir | ||||||
|       shift |       shift | ||||||
|       $posix_glob set +f |       set +f | ||||||
|       IFS=$oIFS |       IFS=$oIFS | ||||||
| 
 | 
 | ||||||
|       prefixes= |       prefixes= | ||||||
| 
 | 
 | ||||||
|       for d |       for d | ||||||
|       do |       do | ||||||
| 	test -z "$d" && continue |         test X"$d" = X && continue | ||||||
| 
 | 
 | ||||||
|         prefix=$prefix$d |         prefix=$prefix$d | ||||||
|         if test -d "$prefix"; then |         if test -d "$prefix"; then | ||||||
|           prefixes= |           prefixes= | ||||||
|         else |         else | ||||||
|           if $posix_mkdir; then |           if $posix_mkdir; then | ||||||
| 	    (umask=$mkdir_umask && |             (umask $mkdir_umask && | ||||||
|              $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break |              $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break | ||||||
|             # Don't fail if two instances are running concurrently. |             # Don't fail if two instances are running concurrently. | ||||||
|             test -d "$prefix" || exit 1 |             test -d "$prefix" || exit 1 | ||||||
|  | @ -443,14 +449,25 @@ do | ||||||
|   else |   else | ||||||
| 
 | 
 | ||||||
|     # Make a couple of temp file names in the proper directory. |     # Make a couple of temp file names in the proper directory. | ||||||
|     dsttmp=$dstdir/_inst.$$_ |     dsttmp=${dstdirslash}_inst.$$_ | ||||||
|     rmtmp=$dstdir/_rm.$$_ |     rmtmp=${dstdirslash}_rm.$$_ | ||||||
| 
 | 
 | ||||||
|     # Trap to clean up those temp files at exit. |     # Trap to clean up those temp files at exit. | ||||||
|     trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 |     trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 | ||||||
| 
 | 
 | ||||||
|     # Copy the file name to the temp name. |     # Copy the file name to the temp name. | ||||||
|     (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && |     (umask $cp_umask && | ||||||
|  |      { test -z "$stripcmd" || { | ||||||
|  | 	 # Create $dsttmp read-write so that cp doesn't create it read-only, | ||||||
|  | 	 # which would cause strip to fail. | ||||||
|  | 	 if test -z "$doit"; then | ||||||
|  | 	   : >"$dsttmp" # No need to fork-exec 'touch'. | ||||||
|  | 	 else | ||||||
|  | 	   $doit touch "$dsttmp" | ||||||
|  | 	 fi | ||||||
|  |        } | ||||||
|  |      } && | ||||||
|  |      $doit_exec $cpprog "$src" "$dsttmp") && | ||||||
| 
 | 
 | ||||||
|     # and set any options; do chmod last to preserve setuid bits. |     # and set any options; do chmod last to preserve setuid bits. | ||||||
|     # |     # | ||||||
|  | @ -467,18 +484,22 @@ do | ||||||
|     if $copy_on_change && |     if $copy_on_change && | ||||||
|        old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` && |        old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` && | ||||||
|        new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` && |        new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` && | ||||||
| 
 |        set -f && | ||||||
|        eval "$initialize_posix_glob" && |  | ||||||
|        $posix_glob set -f && |  | ||||||
|        set X $old && old=:$2:$4:$5:$6 && |        set X $old && old=:$2:$4:$5:$6 && | ||||||
|        set X $new && new=:$2:$4:$5:$6 && |        set X $new && new=:$2:$4:$5:$6 && | ||||||
|        $posix_glob set +f && |        set +f && | ||||||
| 
 |  | ||||||
|        test "$old" = "$new" && |        test "$old" = "$new" && | ||||||
|        $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 |        $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 | ||||||
|     then |     then | ||||||
|       rm -f "$dsttmp" |       rm -f "$dsttmp" | ||||||
|     else |     else | ||||||
|  |       # If $backupsuffix is set, and the file being installed | ||||||
|  |       # already exists, attempt a backup.  Don't worry if it fails, | ||||||
|  |       # e.g., if mv doesn't support -f. | ||||||
|  |       if test -n "$backupsuffix" && test -f "$dst"; then | ||||||
|  |         $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null | ||||||
|  |       fi | ||||||
|  | 
 | ||||||
|       # Rename the file to the real destination. |       # Rename the file to the real destination. | ||||||
|       $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || |       $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || | ||||||
| 
 | 
 | ||||||
|  | @ -493,9 +514,9 @@ do | ||||||
|         # file should still install successfully. |         # file should still install successfully. | ||||||
|         { |         { | ||||||
|           test ! -f "$dst" || |           test ! -f "$dst" || | ||||||
| 	  $doit $rmcmd -f "$dst" 2>/dev/null || |           $doit $rmcmd "$dst" 2>/dev/null || | ||||||
|           { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && |           { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && | ||||||
| 	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } |             { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } | ||||||
|           } || |           } || | ||||||
|           { echo "$0: cannot unlink or rename $dst" >&2 |           { echo "$0: cannot unlink or rename $dst" >&2 | ||||||
|             (exit 1); exit 1 |             (exit 1); exit 1 | ||||||
|  | @ -512,10 +533,9 @@ do | ||||||
| done | done | ||||||
| 
 | 
 | ||||||
| # Local variables: | # Local variables: | ||||||
| # eval: (add-hook 'write-file-hooks 'time-stamp) | # eval: (add-hook 'before-save-hook 'time-stamp) | ||||||
| # time-stamp-start: "scriptversion=" | # time-stamp-start: "scriptversion=" | ||||||
| # time-stamp-format: "%:y-%02m-%02d.%02H" | # time-stamp-format: "%:y-%02m-%02d.%02H" | ||||||
| # time-stamp-time-zone: "UTC" | # time-stamp-time-zone: "UTC0" | ||||||
| # time-stamp-end: "; # UTC" | # time-stamp-end: "; # UTC" | ||||||
| # End: | # End: | ||||||
|  | |||||||