From 2e9ef09d73b03466f0aa2490ffbdf554d934fea2 Mon Sep 17 00:00:00 2001 From: johan Date: Wed, 3 Jul 2002 19:16:31 +0000 Subject: Change to NetBSDs version of whereis. Approved by: sheldonh (mentor) Obtained from: NetBSD --- usr.bin/whereis/whereis.1 | 107 +++++++---------------------------- usr.bin/whereis/whereis.c | 139 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 160 insertions(+), 86 deletions(-) create mode 100644 usr.bin/whereis/whereis.c (limited to 'usr.bin') diff --git a/usr.bin/whereis/whereis.1 b/usr.bin/whereis/whereis.1 index 72722a9..2a03b92 100644 --- a/usr.bin/whereis/whereis.1 +++ b/usr.bin/whereis/whereis.1 @@ -1,3 +1,6 @@ +.\" $NetBSD: whereis.1,v 1.12 2001/12/01 16:43:27 wiz Exp $ +.\" $FreeBSD$ +.\" .\" Copyright (c) 1993 .\" The Regents of the University of California. All rights reserved. .\" @@ -29,11 +32,9 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" @(#)whereis.1 8.2 (Berkeley) 12/30/93 -.\" -.\" $FreeBSD$ +.\" @(#)whereis.1 8.3 (Berkeley) 4/27/95 .\" -.Dd June 15, 1996 +.Dd April 27, 1995 .Dt WHEREIS 1 .Os .Sh NAME @@ -41,101 +42,35 @@ .Nd locate programs .Sh SYNOPSIS .Nm -.Op Fl bms -.Op Fl u -.Op Fl BMS dir ... Fl f -.Ar program ... +.Op Fl p +.Ar program +.Op Ar program ... .Sh DESCRIPTION The .Nm -utility checks the standard binary, manual page, and source -directories for the specified programs, printing out the paths of any -it finds. The supplied names are first stripped of leading path name -components, any single trailing extension added by -.Xr gzip 1 -or -.Xr compress 1 , -and the leading -.Ql s.\& -or trailing -.Ql ,v -from a source code control system. +utility checks the standard binary directories for the specified programs, +printing out the paths of any it finds. .Pp The default path searched is the string returned by the .Xr sysctl 8 utility for the .Dq user.cs_path -string, with -.Pa /usr/libexec -and the current user's -.Ev $PATH -appended. Manual pages are searched by default along the -.Ev $MANPATH . -Program sources are located in a list of known standard places, -including all the subdirectories of -.Pa /usr/src -and -.Pa /usr/ports . -.Pp -The following options are available: -.Bl -tag -width indent -.It Fl B -Specify directories to search for binaries. Requires the -.Fl f -option. -.It Fl M -Specify directories to search for manual pages. Requires the -.Fl f -option. -.It Fl S -Specify directories to search for program sources. Requires the -.Fl f -option. -.It Fl b -Search for binaries. -.It Fl f -Delimits the list of directories after the -.Fl B , -.Fl M , -or -.Fl S -options, and indicates the beginning of the -.Ar name -list. -.It Fl m -Search for manual pages. -.It Fl s -Search for source directories. -.It Fl u -Search for -.Dq unusual -entries. A file is said to be unusual if it does not have one entry -of each requested type. -.El -.Sh EXAMPLES -The following finds all utilities under -.Pa /usr/bin -that do not have documentation: -.Dl whereis -m -u /usr/bin/* +string. +If the +.Op Fl p +option is specified, then the value of the environment +variable +.Ev PATH +is used instead. .Sh SEE ALSO -.Xr find 1 , -.Xr locate 1 , -.Xr man 1 , .Xr which 1 , .Xr sysctl 8 -.Sh BUGS -The search for sources is implemented as a quick search as the -first-level subdirectory of each element of the list of source -directories first. If this didn't succeed, the utility -.Xr locate 1 -is requested to do the search in deeper nested subdirectories. This -might take some time, and will only succeed if the locate database is -up-to-date. +.Sh COMPATIBILITY +The historic flags and arguments for the +.Nm +utility are no longer available in this version. .Sh HISTORY The .Nm command appeared in .Bx 3.0 . -This version re-implements the historical -functionality that was lost in -.Bx 4.4 . diff --git a/usr.bin/whereis/whereis.c b/usr.bin/whereis/whereis.c new file mode 100644 index 0000000..2649cff --- /dev/null +++ b/usr.bin/whereis/whereis.c @@ -0,0 +1,139 @@ +/* $NetBSD: whereis.c,v 1.11 2002/06/11 06:06:21 itojun Exp $ */ +/* $FreeBSD$ */ + +/*- + * Copyright (c) 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +#ifndef lint +__COPYRIGHT("@(#) Copyright (c) 1993\n\ + The Regents of the University of California. All rights reserved.\n"); +#endif /* not lint */ + +#ifndef lint +#if 0 +static char sccsid[] = "@(#)whereis.c 8.3 (Berkeley) 5/4/95"; +#endif +__RCSID("$NetBSD: whereis.c,v 1.11 2002/06/11 06:06:21 itojun Exp $"); +#endif /* not lint */ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +void usage __P((void)); +int main __P((int, char *[])); + +int +main(argc, argv) + int argc; + char *argv[]; +{ + struct stat sb; + size_t len; + int ch, sverrno, mib[2]; + char *p, *t, *std, path[MAXPATHLEN]; + int useenvpath = 0; + + while ((ch = getopt(argc, argv, "p")) != -1) + switch (ch) { + case 'p': + useenvpath = 1; /* use environment for PATH */ + break; + + case '?': + default: + usage(); + } + argc -= optind; + argv += optind; + + if (argc == 0) + usage(); + + if (useenvpath) { + if ((std = getenv("PATH")) == NULL) + err(1, "getenv: PATH" ); + } else { + /* Retrieve the standard path. */ + mib[0] = CTL_USER; + mib[1] = USER_CS_PATH; + if (sysctl(mib, 2, NULL, &len, NULL, 0) == -1) + return (-1); + if (len == 0) + err(1, "user_cs_path: sysctl: zero length"); + if ((std = malloc(len)) == NULL) + err(1, NULL); + if (sysctl(mib, 2, std, &len, NULL, 0) == -1) { + sverrno = errno; + free(std); + errno = sverrno; + err(1, "sysctl: user_cs_path"); + } + } + + /* For each path, for each program... */ + for (; *argv; ++argv) + for (p = std;; *p++ = ':') { + t = p; + if ((p = strchr(p, ':')) != NULL) { + *p = '\0'; + if (t == p) + t = "."; + } else + if (strlen(t) == 0) + t = "."; + (void)snprintf(path, sizeof(path), "%s/%s", t, *argv); + if (!stat(path, &sb)) + (void)printf("%s\n", path); + if (p == NULL) + break; + } + + return (0); +} + +void +usage() +{ + + (void)fprintf(stderr, "usage: whereis [-p] program [...]\n"); + exit (1); +} -- cgit v1.1