Fix handling of '-*' in user alterable variables. (Bug #192979)
authorfuzzyray <fuzzyray@gentoo.org>
Wed, 19 Sep 2007 21:19:06 +0000 (21:19 -0000)
committerfuzzyray <fuzzyray@gentoo.org>
Wed, 19 Sep 2007 21:19:06 +0000 (21:19 -0000)
svn path=/; revision=447

trunk/src/revdep-rebuild/revdep-rebuild

index 19de90dc512ce369800e942785f63fe022992128..9d5f933b08df93a415d08f697b1959ea9822f304 100755 (executable)
@@ -165,11 +165,13 @@ get_file_owner() { :; }
 # Replace whitespace with linebreaks, normalize repeated '/' chars, and sort -u
 # (If any libs have whitespace in their filenames, someone needs punishment.)
 clean_var() {
-       local a=$(echo ${@%%[[:space:]]-\*[[:space:]]*}) # Deliberately unquoted
-       # A benchmark shows this loop is faster than piping to sed,
-       # as long as there aren't more than a handful of '/' chars.
-       while [[ $a = *//* ]]; do a="${a//\/\///}"; done
-       sort -u <<< "${a// /$'\n'}"
+       [[ $@ = '-*'* ]] && return
+       shopt -s extglob
+       local a="$@"
+       a="${a%%[[:space:]]-\*[[:space:]]*}" # Delete what follows -*
+       a="${a//+([[:space:]])/$'\n'}"       # Turn spaces into linebreaks
+       a="${a//+(\/\/)//}"                  # Normalize slashes
+       sort -u <<< "$a"
 }
 # Exit and optionally output to sterr
 die() {