* Copyright (c) 1980 The Regents of the University of California.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 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
"@(#) Copyright (c) 1980 The Regents of the University of California.\n\
static char sccsid
[] = "@(#)whereis.c 5.5 (Berkeley) 4/18/91";
static char *bindirs
[] = {
/* This needs to be redone - man pages live with sources */
static char *mandirs
[] = {
static char *srcdirs
[] = {
#ifdef notdef /* before reorg */
"/usr/src/lib/libc/stdio",
"/usr/src/lib/libc/net/common",
"/usr/src/lib/libc/net/inet",
"/usr/src/lib/libc/net/misc",
"/usr/src/ucb/pascal/utilities",
* look for source, documentation and binaries
fprintf(stderr
, "whereis [ -sbmu ] [ -SBM dir ... -f ] name...\n");
register char *cp
= argv
[0] + 1;
while (*cp
) switch (*cp
++) {
getlist(&argc
, &argv
, &Sflag
, &Scnt
);
getlist(&argc
, &argv
, &Bflag
, &Bcnt
);
getlist(&argc
, &argv
, &Mflag
, &Mcnt
);
getlist(argcp
, argvp
, flagp
, cntp
)
for ((*argcp
)--; *argcp
> 0 && (*argvp
)[0][0] != '-'; (*argcp
)--)
if (sflag
&& bflag
&& mflag
)
sflag
= bflag
= mflag
= 0;
if (uflag
&& print
== 0 && count
!= 1) {
if (uflag
&& print
== 0 && count
!= 1) {
if (uflag
&& print
== 0 && count
!= 1) {
findin(*dirv
++, cp
), dirc
--;
while ((dp
= readdir(dirp
)) != NULL
) {
if (itsit(cp
, dp
->d_name
)) {
printf(" %s/%s", dir
, dp
->d_name
);
register int i
= strlen(dp
);
if (dp
[0] == 's' && dp
[1] == '.' && itsit(cp
, dp
+2))
while (*cp
&& *dp
&& *cp
== *dp
)
if (*cp
== 0 && *dp
== 0)
if (*cp
== 0 && *dp
++ == '.') {
return (*dp
++ == 'C' && *dp
++ == 0);