diff options
-rwxr-xr-x | en_US.ISO8859-1/htdocs/cgi/man.cgi | 45 |
1 files changed, 40 insertions, 5 deletions
diff --git a/en_US.ISO8859-1/htdocs/cgi/man.cgi b/en_US.ISO8859-1/htdocs/cgi/man.cgi index 700b552fc0..293f65e942 100755 --- a/en_US.ISO8859-1/htdocs/cgi/man.cgi +++ b/en_US.ISO8859-1/htdocs/cgi/man.cgi @@ -672,7 +672,7 @@ $manPathDefault = 'FreeBSD 12.0-RELEASE and Ports'; 'HP-UX 10.01', "$manLocalDir/HP-UX-10.01", 'HP-UX 9.07', "$manLocalDir/HP-UX-9.07", - 'IRIX-6.5.30', "$manLocalDir/IRIX-6.5.30/catman/a_man:$manLocalDir/IRIX-6.5.30/catman/p_man:$manLocalDir/IRIX-6.5.30/catman/u_man:$manLocalDir/IRIX-6.5.30/dt", + 'IRIX 6.5.30', "$manLocalDir/IRIX-6.5.30/catman/a_man:$manLocalDir/IRIX-6.5.30/catman/p_man:$manLocalDir/IRIX-6.5.30/catman/u_man:$manLocalDir/IRIX-6.5.30/dt", 'SunOS 5.10', "$manLocalDir/SunOS-5.10", 'SunOS 5.9', "$manLocalDir/SunOS-5.9", @@ -911,20 +911,55 @@ sub sort_versions { my @b = ( lc($b) =~ m,^(\D+)([\d\.]+)(\D*)$, ); if (@a and @b) { - return $a[0] cmp $b[0] || (-1 * ($a[1] <=> $b[1])) || $a[2] cmp $a[2] || $a cmp $b; + return $a[0] cmp $b[0] || # FreeBDS <=> IRIX + &version($a[1], $b[1]) || # 6.5.30 <=> 6.5.31 + $a[2] cmp $a[2] || # RELEASE <=> ports + $a cmp $b; # rest } # 2.9.1 BSD - @a = ( lc($a) =~ m,^(\d\.+)(.*)$, ); - @b = ( lc($b) =~ m,^(\d\.+)(.*)$, ); + @a = ( lc($a) =~ m,^([\d\.]+)(.*)$, ); + @b = ( lc($b) =~ m,^([\d\.]+)(.*)$, ); if (@a and @b) { - return (-1 * ( $a[0] <=> $b[0])) || $a[1] <=> $b[1] || $a cmp $b; + return &version($a[0], $b[0]) || # 2.9.1BSD + $a[1] <=> $b[1] || # BSD + $a cmp $b; # rest } # rest return $a cmp $b; } +sub version { + return &version_compare(@_) * -1; +} + +# compare two versions, e.g.: 5.1.1 <> 5.2.2 +sub version_compare { + my $a = shift; + my $b = shift; + + my @a = split( '\.', $a ); + my @b = split( '\.', $b ); + + my $max = @a >= @b ? @a : @b; + + for ( my $i = 0 ; $i < $max ; $i++ ) { + + # 5.1 <=> 5.1.1 + return -1 if !defined $a[$i]; + + # 5.1.1 <=> 5.1 + return +1 if !defined $b[$i]; + + if ( ( $a[$i] <=> $b[$i] ) != 0 ) { + return $a[$i] <=> $b[$i]; + } + } + + return 0; +} + # FreeBSD manual pages first before any other manual pages sub freebsd_first { my @list = @_; |