summaryrefslogtreecommitdiffstats
path: root/misc-utils/whereis.c
diff options
context:
space:
mode:
authorKarel Zak2006-12-07 00:25:35 +0100
committerKarel Zak2006-12-07 00:25:35 +0100
commit2b6fc908bc368b540845a313c3b8a867c5ad9a42 (patch)
tree6fad48a239bc90515a5dc4084d6e3c3ee1f41e29 /misc-utils/whereis.c
parentImported from util-linux-2.7.1 tarball. (diff)
downloadkernel-qcow2-util-linux-2b6fc908bc368b540845a313c3b8a867c5ad9a42.tar.gz
kernel-qcow2-util-linux-2b6fc908bc368b540845a313c3b8a867c5ad9a42.tar.xz
kernel-qcow2-util-linux-2b6fc908bc368b540845a313c3b8a867c5ad9a42.zip
Imported from util-linux-2.8 tarball.
Diffstat (limited to 'misc-utils/whereis.c')
-rw-r--r--misc-utils/whereis.c253
1 files changed, 77 insertions, 176 deletions
diff --git a/misc-utils/whereis.c b/misc-utils/whereis.c
index 841360116..1a8e1edd7 100644
--- a/misc-utils/whereis.c
+++ b/misc-utils/whereis.c
@@ -31,18 +31,11 @@
* SUCH DAMAGE.
*/
-#ifndef lint
-char copyright[] =
-"@(#) Copyright (c) 1980 The Regents of the University of California.\n\
- All rights reserved.\n";
-#endif /* not lint */
-
-#ifndef lint
-static char sccsid[] = "@(#)whereis.c 5.5 (Berkeley) 4/18/91";
-#endif /* not lint */
+/* *:aeb */
#include <sys/param.h>
#include <sys/dir.h>
+#include <sys/stat.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
@@ -59,40 +52,33 @@ void findin(char *, char *);
int itsit(char *, char *);
static char *bindirs[] = {
-#ifdef __linux__
"/bin",
"/usr/bin",
- "/etc",
- "/usr/etc",
"/sbin",
"/usr/sbin",
+ "/etc",
+ "/usr/etc",
+ "/lib",
+ "/usr/lib",
"/usr/games",
"/usr/games/bin",
+ "/usr/games/lib",
"/usr/emacs/etc",
- "/usr/lib/emacs/19.22/etc",
- "/usr/lib/emacs/19.23/etc",
- "/usr/lib/emacs/19.24/etc",
- "/usr/lib/emacs/19.25/etc",
- "/usr/lib/emacs/19.26/etc",
- "/usr/lib/emacs/19.27/etc",
- "/usr/lib/emacs/19.28/etc",
- "/usr/lib/emacs/19.29/etc",
- "/usr/lib/emacs/19.30/etc",
- "/usr/lib/emacs/19.31/etc",
- "/usr/lib/emacs/19.32/etc",
+ "/usr/lib/emacs/*/etc",
"/usr/TeX/bin",
"/usr/tex/bin",
"/usr/interviews/bin/LINUX",
+ "/usr/X11R6/bin",
+ "/usr/X386/bin",
"/usr/bin/X11",
"/usr/X11/bin",
"/usr/X11R5/bin",
- "/usr/X11R6/bin",
- "/usr/X386/bin",
"/usr/local/bin",
- "/usr/local/etc",
"/usr/local/sbin",
+ "/usr/local/etc",
+ "/usr/local/lib",
"/usr/local/games",
"/usr/local/games/bin",
"/usr/local/emacs/etc",
@@ -105,129 +91,33 @@ static char *bindirs[] = {
"/usr/include",
"/usr/g++-include",
-#else
- "/bin",
- "/sbin",
- "/usr/ucb",
- "/usr/bin",
- "/usr/sbin",
- "/usr/old",
- "/usr/contrib",
- "/usr/games",
- "/usr/local",
- "/usr/libexec",
- "/usr/include",
- "/usr/hosts",
- "/usr/share", /*?*/
- "/etc",
-#ifdef notdef
- /* before reorg */
- "/etc",
- "/bin",
- "/usr/bin",
- "/usr/games",
- "/lib",
- "/usr/ucb",
- "/usr/lib",
- "/usr/local",
- "/usr/new",
- "/usr/old",
- "/usr/hosts",
- "/usr/include",
-#endif
-#endif
+
+ "/usr/ucb",
+ "/usr/old",
+ "/usr/new",
+ "/usr/local",
+ "/usr/libexec",
+ "/usr/share",
+
0
};
-/* This needs to be redone - man pages live with sources */
+
static char *mandirs[] = {
- "/usr/man/man1",
- "/usr/man/man2",
- "/usr/man/man3",
- "/usr/man/man4",
- "/usr/man/man5",
- "/usr/man/man6",
- "/usr/man/man7",
- "/usr/man/man8",
-#ifdef __linux__
- "/usr/man/man9",
-#endif
- "/usr/man/manl",
- "/usr/man/mann",
- "/usr/man/mano",
-#ifdef __linux__
- "/usr/X386/man/man1",
- "/usr/X386/man/man2",
- "/usr/X386/man/man3",
- "/usr/X386/man/man4",
- "/usr/X386/man/man5",
- "/usr/X386/man/man6",
- "/usr/X386/man/man7",
- "/usr/X386/man/man8",
- "/usr/X11/man/man1",
- "/usr/X11/man/man2",
- "/usr/X11/man/man3",
- "/usr/X11/man/man4",
- "/usr/X11/man/man5",
- "/usr/X11/man/man6",
- "/usr/X11/man/man7",
- "/usr/X11/man/man8",
- "/usr/TeX/man/man1",
- "/usr/TeX/man/man2",
- "/usr/TeX/man/man3",
- "/usr/TeX/man/man4",
- "/usr/TeX/man/man5",
- "/usr/TeX/man/man6",
- "/usr/TeX/man/man7",
- "/usr/TeX/man/man8",
+ "/usr/man/*",
+ "/usr/X386/man/*",
+ "/usr/X11/man/*",
+ "/usr/TeX/man/*",
"/usr/interviews/man/mann",
-#endif
0
};
+
static char *srcdirs[] = {
- "/usr/src/bin",
- "/usr/src/sbin",
- "/usr/src/etc",
- "/usr/src/pgrm",
- "/usr/src/usr.bin",
- "/usr/src/usr.sbin",
- "/usr/src/usr.ucb",
- "/usr/src/usr.new",
- "/usr/src/usr.lib",
- "/usr/src/libexec",
- "/usr/src/libdata",
- "/usr/src/share",
- "/usr/src/contrib",
- "/usr/src/athena",
- "/usr/src/devel",
- "/usr/src/games",
- "/usr/src/local",
- "/usr/src/man",
- "/usr/src/root",
- "/usr/src/old",
- "/usr/src/include",
- /* still need libs */
-#ifdef notdef /* before reorg */
- "/usr/src/bin",
- "/usr/src/usr.bin",
- "/usr/src/etc",
- "/usr/src/ucb",
- "/usr/src/games",
- "/usr/src/usr.lib",
- "/usr/src/lib",
- "/usr/src/local",
- "/usr/src/new",
- "/usr/src/old",
- "/usr/src/include",
- "/usr/src/lib/libc/gen",
- "/usr/src/lib/libc/stdio",
- "/usr/src/lib/libc/sys",
- "/usr/src/lib/libc/net/common",
- "/usr/src/lib/libc/net/inet",
- "/usr/src/lib/libc/net/misc",
+ "/usr/src/*",
+ "/usr/src/lib/libc/*",
+ "/usr/src/lib/libc/net/*",
"/usr/src/ucb/pascal",
"/usr/src/ucb/pascal/utilities",
"/usr/src/undoc",
-#endif
0
};
@@ -307,13 +197,7 @@ usage:
}
void
-getlist(argcp, argvp, flagp, cntp)
- char ***argvp;
- int *argcp;
- char ***flagp;
- int *cntp;
-{
-
+getlist(int *argcp, char ***argvp, char ***flagp, int *cntp) {
(*argvp)++;
*flagp = *argvp;
*cntp = 0;
@@ -335,9 +219,7 @@ int count;
int print;
void
-lookup(cp)
- register char *cp;
-{
+lookup(char *cp) {
register char *dp;
for (dp = cp; *dp; dp++)
@@ -387,9 +269,7 @@ again:
}
void
-looksrc(cp)
- char *cp;
-{
+looksrc(char *cp) {
if (Sflag == 0) {
find(srcdirs, cp);
} else
@@ -397,9 +277,7 @@ looksrc(cp)
}
void
-lookbin(cp)
- char *cp;
-{
+lookbin(char *cp) {
if (Bflag == 0)
find(bindirs, cp);
else
@@ -407,9 +285,7 @@ lookbin(cp)
}
void
-lookman(cp)
- char *cp;
-{
+lookman(char *cp) {
if (Mflag == 0) {
find(mandirs, cp);
} else
@@ -417,33 +293,54 @@ lookman(cp)
}
void
-findv(dirv, dirc, cp)
- char **dirv;
- int dirc;
- char *cp;
-{
-
+findv(char **dirv, int dirc, char *cp) {
while (dirc > 0)
findin(*dirv++, cp), dirc--;
}
void
-find(dirs, cp)
- char **dirs;
- char *cp;
-{
-
+find(char **dirs, char *cp) {
while (*dirs)
findin(*dirs++, cp);
}
void
-findin(dir, cp)
- char *dir, *cp;
-{
+findin(char *dir, char *cp) {
DIR *dirp;
struct direct *dp;
+ char *d, *dd;
+ int l;
+ char dirbuf[1024];
+ struct stat statbuf;
+
+ dd = index(dir, '*');
+ if (!dd)
+ goto noglob;
+
+ l = strlen(dir);
+ if (l < sizeof(dirbuf)) { /* refuse excessively long names */
+ strcpy (dirbuf, dir);
+ d = index(dirbuf, '*');
+ *d = 0;
+ dirp = opendir(dirbuf);
+ if (dirp == NULL)
+ return;
+ while ((dp = readdir(dirp)) != NULL) {
+ if (strlen(dp->d_name) + l > sizeof(dirbuf))
+ continue;
+ sprintf(d, "%s", dp->d_name);
+ if (stat(dirbuf, &statbuf))
+ continue;
+ if (!S_ISDIR(statbuf.st_mode))
+ continue;
+ strcat(d, dd+1);
+ findin(dirbuf, cp);
+ }
+ closedir(dirp);
+ }
+ return;
+ noglob:
dirp = opendir(dir);
if (dirp == NULL)
return;
@@ -458,13 +355,17 @@ findin(dir, cp)
}
int
-itsit(cp, dp)
- register char *cp, *dp;
-{
- register int i = strlen(dp);
+itsit(char *cp, char *dp) {
+ int i = strlen(dp);
if (dp[0] == 's' && dp[1] == '.' && itsit(cp, dp+2))
return (1);
+ if (!strcmp(dp+i-2, ".Z"))
+ i -= 2;
+ else if (!strcmp(dp+i-3, ".gz"))
+ i -= 3;
+ else if (!strcmp(dp+i-4, ".bz2"))
+ i -= 4;
while (*cp && *dp && *cp == *dp)
cp++, dp++, i--;
if (*cp == 0 && *dp == 0)