--- toast	2003/10/19 18:45:08	1.218
+++ toast	2003/10/19 21:03:47	1.219
@@ -758,7 +758,7 @@
     $link = $proto . $link if $link =~ m!^//!;
     $link = $host . $link if $link =~ m!^/!;
     $link = $parent . $link unless $link =~ m!^(\w+)://!;
-    push(@links, $link);
+    push(@links, cleanurl($link));
   }
   return @links;
 }
@@ -1368,38 +1368,46 @@
       error("unexpected response from $redirurl");
   my($url) = $1;
 
-  if(lookslikepkgurl($url))
+  for(1..3)
   {
-    (undef, $version) = guessnv($url) unless defined($version);
-    return ($name, $version, $url);
-  }
+    if(lookslikepkgurl($url))
+    {
+      (undef, $version) = guessnv($url) unless defined($version);
+      return ($name, $version, $url);
+    }
 
-  my(@urls) = grep(lookslikepkgurl($_, $name, $version), linksfromurl($url));
-  my(@exts) = (qw[.tar.bz2 .tar.gz .tgz .zip .rpm]);
-  my($extpat) = '(' . join('|', map(quotemeta($_), @exts)) . ')$';
-  @urls = grep(/$extpat/, @urls);
+    my(@links) = linksfromurl($url);
+    my(@urls) = grep(lookslikepkgurl($_, $name, $version), @links);
+    my(@exts) = (qw[.tar.bz2 .tar.gz .tgz .zip .rpm]);
+    my($extpat) = '(' . join('|', map(quotemeta($_), @exts)) . ')$';
+    @urls = grep(/$extpat/, @urls);
 
-  if(!defined($version))
-  {
-    my(@versions) = map { my(undef, $v) = guessnv($_); $v } @urls;
-    @versions = grep(defined($_), @versions);
-    if(@versions)
+    if(!defined($version))
     {
-      @versions = reverse sort cmpab @versions;
-      $version = $versions[0];
-      @urls = grep
+      my(@versions) = map { my(undef, $v) = guessnv($_); $v } @urls;
+      @versions = grep(defined($_), @versions);
+      if(@versions)
       {
-        my(undef, $v) = guessnv($_);
-        defined($v) && $v eq $version;
-      } @urls;
+        @versions = reverse sort cmpab @versions;
+        $version = $versions[0];
+        @urls = grep
+        {
+          my(undef, $v) = guessnv($_);
+          defined($v) && $v eq $version;
+        } @urls;
+      }
     }
-  }
 
-  my($ext);
-  for $ext (@exts)
-  {
-    my(@matches) = grep(stripquery($_) =~ /\Q$ext\E$/i, @urls);
-    return ($name, $version, $matches[0]) if @matches;
+    my($ext);
+    for $ext (@exts)
+    {
+      my(@matches) = grep(stripquery($_) =~ /\Q$ext\E$/i, @urls);
+      return ($name, $version, $matches[0]) if @matches;
+    }
+
+    @links = grep(/^\Q$url\E/, @links);
+    last unless @links;
+    $url = pop(@links);
   }
 
   error("can't find URLs for " . pkgname($name, $version) . " at $url");
@@ -3436,6 +3444,7 @@
   local($_) = @_;
   s/ /\+/g;
   s/[^\!-\~]/urlescapechar($&)/ge;
+  s!^(ftp://[^/:]+):21(/|$)!$1$2!; # wget likes to emit redundant ftp port no.
   $_;
 }