[git commit] Fix install with hardlinks and a custom PREFIX. Closes 10801

Denys Vlasenko vda.linux at googlemail.com
Fri Feb 23 15:29:26 UTC 2018


commit: https://git.busybox.net/busybox/commit/?id=bf39d97e9d9422537970ed8c3af1b8270bdf0ac0
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

Trying to install busybox with hardlinks and a custom PREFIX will fail
for applets not in the /bin directory, because relative pathnames are
used. applets/install.sh is *supposed to* use the absolute pathname
for hardlinks but it fails to do so because the wrong check is used
in the if statement.

While fixing it, shore up other sloppy coding in applets/install.sh

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 applets/install.sh | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/applets/install.sh b/applets/install.sh
index ae99381d7..c75a78e9d 100755
--- a/applets/install.sh
+++ b/applets/install.sh
@@ -38,7 +38,7 @@ while [ ${#} -gt 0 ]; do
 	shift
 done
 
-if [ -n "$DO_INSTALL_LIBS" ] && [ "$DO_INSTALL_LIBS" != "n" ]; then
+if [ -n "$DO_INSTALL_LIBS" ] && [ x"$DO_INSTALL_LIBS" != x"n" ]; then
 	# get the target dir for the libs
 	# assume it starts with lib
 	libdir=$($CC -print-file-name=libc.so | \
@@ -58,7 +58,7 @@ if [ -n "$DO_INSTALL_LIBS" ] && [ "$DO_INSTALL_LIBS" != "n" ]; then
 	done
 fi
 
-if [ "$cleanup" = "1" ] && [ -e "$prefix/bin/busybox" ]; then
+if [ x"$cleanup" = x"1" ] && [ -e "$prefix/bin/busybox" ]; then
 	inode=`ls -i "$prefix/bin/busybox" | awk '{print $1}'`
 	sub_shell_it=`
 		cd "$prefix"
@@ -81,13 +81,13 @@ install -m 755 busybox "$prefix/bin/busybox" || exit 1
 for i in $h; do
 	appdir=`dirname "$i"`
 	app=`basename "$i"`
-	if [ "$noclobber" = "1" ] && [ -e "$prefix/$i" ]; then
+	if [ x"$noclobber" = x"1" ] && [ -e "$prefix/$i" ]; then
 		echo "  $prefix/$i already exists"
 		continue
 	fi
 	mkdir -p "$prefix/$appdir" || exit 1
-	if [ "$scriptwrapper" = "y" ]; then
-		if [ "$swrapall" != "y" ] && [ "$i" = "/bin/sh" ]; then
+	if [ x"$scriptwrapper" = x"y" ]; then
+		if [ x"$swrapall" != x"y" ] && [ x"$i" = x"/bin/sh" ]; then
 			ln $linkopts busybox "$prefix/$i" || exit 1
 		else
 			rm -f "$prefix/$i"
@@ -95,17 +95,17 @@ for i in $h; do
 			chmod +x "$prefix/$i"
 		fi
 		echo "	$prefix/$i"
-	elif [ "$binaries" = "y" ]; then
+	elif [ x"$binaries" = x"y" ]; then
 		# Copy the binary over rather
-		if [ -e $sharedlib_dir/$app ]; then
+		if [ -e "$sharedlib_dir/$app" ]; then
 			echo "   Copying $sharedlib_dir/$app to $prefix/$i"
-			cp -pPR $sharedlib_dir/$app $prefix/$i || exit 1
+			cp -pPR "$sharedlib_dir/$app" "$prefix/$i" || exit 1
 		else
 			echo "Error: Could not find $sharedlib_dir/$app"
 			exit 1
 		fi
 	else
-		if [ "$2" = "--hardlinks" ]; then
+		if [ x"$linkopts" = x"-f" ]; then
 			bb_path="$prefix/bin/busybox"
 		else
 			case "$appdir" in


More information about the busybox-cvs mailing list