[tor-commits] [torbrowser/maint-2.2] [2525 Linux] Make RelativeLink.sh work when run using a relative symlink

erinn at torproject.org erinn at torproject.org
Sun Sep 4 23:38:15 UTC 2011


commit c9742f2ed77b02d8240d66dc1d4660891386eb11
Author: Robert Ransom <rransom.8774 at gmail.com>
Date:   Fri Sep 2 03:25:11 2011 -0400

    [2525 Linux] Make RelativeLink.sh work when run using a relative symlink
---
 src/RelativeLink/RelativeLink.sh |   31 +++++++++++++++++++++++--------
 1 files changed, 23 insertions(+), 8 deletions(-)

diff --git a/src/RelativeLink/RelativeLink.sh b/src/RelativeLink/RelativeLink.sh
index 579612c..222bb6d 100755
--- a/src/RelativeLink/RelativeLink.sh
+++ b/src/RelativeLink/RelativeLink.sh
@@ -133,17 +133,32 @@ fi
 # If this script is being run through a symlink, we need to know where
 # in the filesystem the script itself is, not where the symlink is.
 myname="$0"
-while [ -L "$myname" ]; do
+if [ -L "$myname" ]; then
 	# XXX readlink is not POSIX, but is present in GNU coreutils
 	# and on FreeBSD.  Unfortunately, the -f option (which follows
 	# a whole chain of symlinks until it reaches a non-symlink
-	# path name) is a GNUism, so we can't safely use it.  (Using
-	# it would be rude to FreeBSD users who currently have no
-	# other officially supported choice than TBB for Linux, and
-	# might even break compatibility with older versions of the
-	# GNU utility.)
-	myname="`readlink -n "$myname"`"
-done
+	# path name) is a GNUism, so we have to have a fallback for
+	# FreeBSD.  Fortunately, FreeBSD has realpath instead;
+	# unfortunately, that's also non-POSIX and is not present in
+	# GNU coreutils.
+	#
+	# If this launcher were a C program, we could just use the
+	# realpath function, which *is* POSIX.  Too bad POSIX didn't
+	# make that function accessible to shell scripts.
+
+	# If realpath is available, use it; it Does The Right Thing.
+	possibly_my_real_name="`realpath "$myname" 2>/dev/null`"
+	if [ "$?" -eq 0 ]; then
+		myname="$possibly_my_real_name"
+	else
+		# realpath is not available; hopefully readlink -f works.
+		myname="`readlink -f "$myname" 2>/dev/null`"
+		if [ "$?" -ne 0 ]; then
+			# Ugh.
+			complain "start-tor-browser cannot be run using a symlink on this operating system."
+		fi
+	fi
+fi
 
 # Try to be agnostic to where we're being started from, chdir to where
 # the script is.





More information about the tor-commits mailing list