Date: 6 Oct 2001 20:53:57 -0000 From: Jos Backus <jos@cncdsl.com> To: FreeBSD-gnats-submit@freebsd.org Subject: bin/31088: Make whereis.pl use strict, and a couple of minor cleanups Message-ID: <20011006205357.61074.qmail@lizzy.bugworks.com>
next in thread | raw e-mail | index | archive | help
>Number: 31088
>Category: bin
>Synopsis: Make whereis.pl use strict, and a couple of minor cleanups
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: update
>Submitter-Id: current-users
>Arrival-Date: Sat Oct 06 14:00:07 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator: Jos Backus
>Release: FreeBSD 5.0-CURRENT i386
>Organization:
none
>Environment:
System: FreeBSD lizzy.bugworks.com 5.0-CURRENT FreeBSD 5.0-CURRENT #0: Sun Sep 30 12:32:29 PDT 2001 jos@lizzy.bugworks.com:/usr/src/sys/i386/compile/LIZZY i386
FreeBSD -current, lightly tested on -stable
>Description:
/usr/src/usr.bin/whereis/whereis.pl does not use strict and does gives
warnings when run with -w.
>How-To-Repeat:
>Fix:
--- whereis.pl.orig Sat Oct 6 13:47:54 2001
+++ whereis.pl Sat Oct 6 13:48:11 2001
@@ -31,31 +31,42 @@
# $FreeBSD: src/usr.bin/whereis/whereis.pl,v 1.8 1999/08/28 01:07:37 peter Exp $
#
+use strict;
+
sub usage
{
- print STDERR "usage: $0 [-bms] [-u] [-BMS dir... -f] name ...\n";
+ warn "usage: $0 [-bms] [-u] [-BMS dir... -f] name ...\n";
exit 1;
}
+my $opt_b = 0;
+my $opt_m = 0;
+my $opt_s = 0;
+my $opt_u = 0;
+my $manpath;
+my(@binaries, @manuals, @sources, @names);
+
+
sub scanopts
{
- local($i, $j);
+ my($i, $j);
+ $i = 0;
arg:
while ($ARGV[$i] =~ /^-/) {
opt:
- for ($j = 1; $j < length($ARGV[$i]); $j++) {
+ for ($j = 1; $j < length($ARGV[$i]); ++$j) {
local($_) = substr($ARGV[$i], $j, 1);
- local($what, @list);
- $opt_b++, next opt if /b/;
- $opt_m++, next opt if /m/;
- $opt_s++, next opt if /s/;
- $opt_u++, next opt if /u/;
+ my($what, @list);
+ ++$opt_b, next opt if /b/;
+ ++$opt_m, next opt if /m/;
+ ++$opt_s, next opt if /s/;
+ ++$opt_u, next opt if /u/;
&usage unless /[BMS]/;
# directory list processing
$what = $_; @list = ();
push(@list, substr($ARGV[$i], $j+1)) if $j+1 < length($ARGV[$i]);
- $i++;
+ ++$i;
while ($i <= $#ARGV && $ARGV[$i] !~ /^-/) {
push(@list, $ARGV[$i++]);
}
@@ -66,7 +77,7 @@
$i++, last arg if $ARGV[$i] =~ /^-f$/;
next arg;
}
- $i++;
+ ++$i;
}
&usage if $i > $#ARGV;
@@ -78,12 +89,7 @@
sub decolonify
{
- local($list) = @_;
- local($_, @rv);
- foreach(split(/:/, $list)) {
- push(@rv, $_);
- }
- return @rv;
+ return split(/:/, shift);
}
@@ -92,14 +98,12 @@
# default to all if no type requested
if ($opt_b + $opt_m + $opt_s == 0) {$opt_b = $opt_m = $opt_s = 1;}
-if (!defined(@binaries)) {
+unless (@binaries) {
#
# first, use default path, then append /usr/libexec and the user's path
#
- local($cs_path) = `/sbin/sysctl -n user.cs_path`;
- local(@list, %path);
-
- chop($cs_path);
+ chop(my($cs_path) = `/sbin/sysctl -n user.cs_path`);
+ my(@list, %path);
@list = &decolonify($cs_path);
push(@list, "/usr/libexec");
@@ -108,33 +112,31 @@
# resolve ~, remove duplicates
foreach (@list) {
s/^~/$ENV{'HOME'}/ if /^~/;
- push(@binaries, $_) if !$path{$_};
- $path{$_}++;
+ push(@binaries, $_) unless $path{$_};
+ ++$path{$_};
}
}
-if (!defined(@manuals)) {
+unless (@manuals) {
#
# first, use default manpath, then append user's $MANPATH
#
- local($usermanpath) = $ENV{'MANPATH'};
+ my($usermanpath) = $ENV{'MANPATH'} || '';
delete $ENV{'MANPATH'};
- local($manpath) = `/usr/bin/manpath`;
- local(@list, %path, $i);
-
- chop($manpath);
+ chop($manpath = `/usr/bin/manpath`);
+ my(@list, %path);
@list = &decolonify($manpath);
push(@list, &decolonify($usermanpath));
# remove duplicates
foreach (@list) {
- push(@manuals, $_) if !$path{$_};
- $path{$_}++;
+ push(@manuals, $_) unless $path{$_};
+ ++$path{$_};
}
}
-if (!defined(@sources)) {
+unless (@sources) {
#
# default command sources
#
@@ -149,6 +151,7 @@
#
# if /usr/ports exists, look in all its subdirs, too
#
+ local *PORTS;
if (-d "/usr/ports" && opendir(PORTS, "/usr/ports")) {
while ($_ = readdir(PORTS)) {
next if /^\.\.?$/;
@@ -163,31 +166,30 @@
if ($opt_m) {
# construct a new MANPATH
foreach (@manuals) {
- next if ! -d $_;
- if ($manpath) { $manpath .= ":$_"; }
- else { $manpath = $_; }
+ next unless -d;
+ $manpath .= $manpath ? ":$_" : $_;
}
}
#
# main loop
#
-foreach $name (@names) {
+foreach my $name (@names) {
$name =~ s|^.*/||; # strip leading path name component
$name =~ s/,v$//; $name =~ s/^s\.//; # RCS or SCCS suffix/prefix
- $name =~ s/\.(Z|z|gz)$//; # compression suffix
+ $name =~ s/\.(Z|z|gz|bz2)$//; # compression suffix
- $line = "";
- $unusual = 0;
+ my $line = "";
+ my $unusual = 0;
if ($opt_b) {
#
# Binaries have to match exactly, and must be regular executable
# files.
#
- $unusual++;
+ ++$unusual;
foreach (@binaries) {
- $line .= " $_/$name", $unusual--, last if -f "$_/$name" && -x _;
+ $line .= " $_/$name", --$unusual, last if -f "$_/$name" && -x _;
}
}
@@ -195,13 +197,12 @@
#
# Ask the man command to do the search for us.
#
- $unusual++;
- chop($result = `man -S 1:8 -M $manpath -w $name 2> /dev/null`);
+ ++$unusual;
+ chop(my $result = `man -S 1:8 -M $manpath -w $name 2> /dev/null`);
if ($result ne '') {
- $unusual--;
- ($cat, $junk, $src) = split(/[() \t\n]+/, $result);
- if ($src ne '') { $line .= " $src"; }
- else { $line .= " $cat"; }
+ --$unusual;
+ my($cat, $junk, $src) = split(/[()\s]+/, $result);
+ $line .= $src ? " $src" : " $cat";
}
}
@@ -209,10 +210,10 @@
#
# Sources match if a subdir with the exact name is found.
#
- $found = 0;
- $unusual++;
+ my $found = 0;
+ ++$unusual;
foreach (@sources) {
- $line .= " $_/$name", $unusual--, $found++ if -d "$_/$name";
+ $line .= " $_/$name", --$unusual, ++$found if -d "$_/$name";
}
#
# If not yet found, ask locate(1) to do the search for us.
@@ -223,9 +224,9 @@
#
if (!$found && open(LOCATE, "locate */$name 2>/dev/null |")) {
locate_item:
- while (chop($loc = <LOCATE>)) {
+ while (chop(my $loc = <LOCATE>)) {
foreach (@sources) {
- $line .= " $loc", $unusual--, last locate_item
+ $line .= " $loc", --$unusual, last locate_item
if $loc =~ m|^$_/[^/]+/|;
}
}
@@ -239,4 +240,3 @@
print "$name:$line\n";
}
}
-
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20011006205357.61074.qmail>
