telnetd term termcap tget time \
truncate udpstat umount \
unstack update uud uue version vol \
- whereis which writeisofs fetch \
+ writeisofs fetch \
zdump zmodem pkgin_cd pkgin_all \
worldstone updateboot update_bootcfg \
atnormalize dosread fdisk loadfont \
+++ /dev/null
-SCRIPTS= whereis.sh
-MAN=
-
-.include <bsd.prog.mk>
+++ /dev/null
-#!/bin/sh
-: List all system directories containing the argument
-: Author: Terrence W. Holm
-if test $# -ne 1; then
- echo "Usage: whereis name"
- exit 1
-fi
-
-path="/bin /lib /etc\
- /usr/bin /usr/lib\
- /usr/include /usr/include/sys"
-
-for dir in $path; do
- for file in $dir/$1 $dir/$1.*; do
- if test -f $file; then
- echo $file
- elif test -d $file; then
- echo $file/
- fi
- done
- done
-
-exit 0
+++ /dev/null
-PROG= which
-MAN=
-
-.include <bsd.prog.mk>
+++ /dev/null
-/* which - search paths for executable */
-
-#define DELIMITER ':'
-
-#include <sys/types.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <stdio.h>
-
-int main(int argc, char **argv);
-
-int main(ac, av)
-int ac;
-char **av;
-{
- char *path, *cp;
- char buf[400];
- char prog[400];
- char patbuf[512];
- int quit, none;
- int excode = 0;
-
- if (ac < 2) {
- fprintf(stderr, "Usage: %s cmd [cmd, ..]\n", *av);
- exit(1);
- }
- av[ac] = 0;
- for (av++; *av; av++) {
-
- quit = 0;
- none = 1;
- if ((path = getenv("PATH")) == NULL) {
- fprintf(stderr, "Null path.\n");
- exit(0);
- }
- strcpy(patbuf, path);
- path = patbuf;
- cp = path;
-
- while (1) {
- cp = strchr(path, DELIMITER);
- if (cp == NULL)
- quit++;
- else
- *cp = '\0';
-
- if (strcmp(path, "") == 0 && quit == 0) {
- sprintf(buf, "%s./%s", path, *av);
- } else
- sprintf(buf, "%s/%s", path, *av);
-
- /* Fprintf(stderr,"Trying %s, path %s\n",buf,path); */
-
- path = ++cp;
-
- if (access(buf, 1) == 0) {
- printf("%s\n", buf);
- none = 0;
- }
- sprintf(prog, "%s.%s", buf, "prg");
- if (access(prog, 1) == 0) {
- printf("%s\n", prog);
- none = 0;
- }
- sprintf(prog, "%s.%s", buf, "ttp");
- if (access(prog, 1) == 0) {
- printf("%s\n", prog);
- none = 0;
- }
- sprintf(prog, "%s.%s", buf, "tos");
- if (access(prog, 1) == 0) {
- printf("%s\n", prog);
- none = 0;
- }
- if (quit) {
- if (none) {
- fprintf(stderr, "No %s in %s\n", *av, getenv("PATH"));
- excode = 1;
- }
- break;
- }
- }
- }
- return(excode);
-}
synctree.1 sysenv.1 sz.1 telnet.1 template.1 \
term.1 termcap.1 tget.1 time.1 \
truncate.1 umount.1 \
- uud.1 uue.1 vol.1 whereis.1 which.1 \
+ uud.1 uue.1 vol.1 \
yap.1 linkfarm.1 pkg_view.1
MLINKS += ash.1 sh.1
+++ /dev/null
-.TH WHEREIS 1
-.SH NAME
-whereis \- examine system directories for a given file
-.SH SYNOPSIS
-\fBwhereis \fIfile\fR
-.br
-.de FL
-.TP
-\\fB\\$1\\fR
-\\$2
-..
-.de EX
-.TP 20
-\\fB\\$1\\fR
-# \\$2
-..
-.SH EXAMPLES
-.TP 20
-.B whereis stat.h
-# Prints: \fI/usr/include/sys/stat.h\fR
-.SH DESCRIPTION
-.PP
-\fIWhereis\fR searches a fixed set of system
-directories, \fI/bin\fR, \fI/lib\fR, \fI/usr/bin\fR,
-and others, and prints all occurrences of the argument name in any of them.
-.SH "SEE ALSO"
-.BR man (1),
-.BR which (1).
+++ /dev/null
-.TH WHICH 1
-.SH NAME
-which \- examine $PATH to see which file will be executed
-.SH SYNOPSIS
-\fBwhich \fIname\fR
-.br
-.de FL
-.TP
-\\fB\\$1\\fR
-\\$2
-..
-.de EX
-.TP 20
-\\fB\\$1\\fR
-# \\$2
-..
-.SH EXAMPLES
-.TP 20
-.B which a.out
-# Tells which \fIa.out\fR will be executed
-.SH DESCRIPTION
-.PP
-The $PATH shell variable controls the
-\s-1MINIX 3\s-1
-search rules.
-If a command \fIa.out\fR is given, the shell first tries to find an
-executable file in the working directory.
-If that fails, it looks in various system directories, such as
-\fI/bin\fR and \fI/usr/bin\fR.
-The\fR which\fR command makes the same search and gives the absolute
-path of the program that will be chosen, followed by other occurrences
-of the file name along the path.
-.SH "SEE ALSO"
-.BR man (1).
uniq units unvis unzip users \
uuidgen vis \
\
- wall wc what who whois \
+ wall wc what whereis who whois \
write xargs xinstall xstr yes
.if !defined(__MINIX)
--- /dev/null
+# $NetBSD: Makefile,v 1.6 2009/04/14 22:15:28 lukem Exp $
+# from: @(#)Makefile 8.1 (Berkeley) 6/6/93
+
+PROG= whereis
+MAN= whereis.1 which.1
+LINKS= ${BINDIR}/whereis ${BINDIR}/which
+
+.include <bsd.prog.mk>
--- /dev/null
+.\" $NetBSD: whereis.1,v 1.14 2003/08/07 11:17:17 agc Exp $
+.\"
+.\" 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. 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.
+.\"
+.\" @(#)whereis.1 8.3 (Berkeley) 4/27/95
+.\"
+.Dd April 3, 2003
+.Dt WHEREIS 1
+.Os
+.Sh NAME
+.Nm whereis
+.Nd locate programs
+.Sh SYNOPSIS
+.Nm
+.Op Fl p
+.Ar program
+.Op Ar program ...
+.Sh DESCRIPTION
+The
+.Nm
+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.
+If the
+.Op Fl p
+option is specified, then the value of the environment
+variable
+.Ev PATH
+is used instead.
+.Sh EXIT STATUS
+The
+.Nm
+utility exits 0 on success, 1 on general error, 2 if only some
+programs were located and 3 if none were.
+.Sh SEE ALSO
+.Xr whatis 1 ,
+.Xr which 1 ,
+.Xr sysctl 8
+.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 .
--- /dev/null
+/* $NetBSD: whereis.c,v 1.21 2008/10/17 10:53:26 apb Exp $ */
+
+/*-
+ * 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. 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 <sys/cdefs.h>
+#ifndef lint
+__COPYRIGHT("@(#) Copyright (c) 1993\
+ The Regents of the University of California. All rights reserved.");
+#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.21 2008/10/17 10:53:26 apb Exp $");
+#endif /* not lint */
+
+#include <sys/param.h>
+#include <sys/stat.h>
+#include <sys/sysctl.h>
+
+#include <err.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+static void usage(void) __dead;
+
+int
+main(int argc, char *argv[])
+{
+ struct stat sb;
+ size_t len;
+#ifdef __minix
+ int ch;
+#else
+ int ch, mib[2];
+#endif /* def __minix */
+ char *p, *std, path[MAXPATHLEN];
+ const char *t;
+ int which = strcmp(getprogname(), "which") == 0;
+ int useenvpath = which, found = 0;
+ gid_t egid = getegid();
+ uid_t euid = geteuid();
+
+ /* To make access(2) do what we want */
+ if (setgid(egid) == -1)
+ err(1, "Can't set gid to %lu", (unsigned long)egid);
+ if (setuid(euid) == -1)
+ err(1, "Can't set uid to %lu", (unsigned long)euid);
+
+ while ((ch = getopt(argc, argv, "ap")) != -1)
+ switch (ch) {
+ case 'a':
+ which = 0;
+ break;
+ 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)
+ errx(1, "PATH environment variable is not set");
+ } else {
+ /* Retrieve the standard path. */
+#ifdef __minix
+ /*
+ Note: This path is currently defined here and should probably be defined
+ here, in "ash" or in "sh".
+ To minimize code changes, the path has been hard coded into this file.
+ However, if this path needs to be used in other ported programs, please
+ move this define to <minix/paths.h> and add the include to this file
+ and all files that use _PATH_USER_CS_PATH.
+ */
+ #define _PATH_USER_CS_PATH "/usr/X11R7/sbin:/usr/local/sbin:/usr/pkg/sbin:/usr/sbin:/sbin:/usr/X11R7/bin:/usr/local/bin:/usr/pkg/bin:/usr/bin:/bin:/usr/games"
+ std = strdup(_PATH_USER_CS_PATH);
+#else
+ mib[0] = CTL_USER;
+ mib[1] = USER_CS_PATH;
+ if (sysctl(mib, 2, NULL, &len, NULL, 0) == -1)
+ err(1, "sysctl: user.cs_path");
+ if (len == 0)
+ errx(1, "sysctl: user.cs_path (zero length)");
+ if ((std = malloc(len)) == NULL)
+ err(1, NULL);
+ if (sysctl(mib, 2, std, &len, NULL, 0) == -1)
+ err(1, "sysctl: user.cs_path");
+#endif /* def __minix */
+ }
+
+ /* For each path, for each program... */
+ for (; *argv; ++argv) {
+ if (**argv == '/') {
+ if (stat(*argv, &sb) == -1)
+ continue; /* next argv */
+ if (!S_ISREG(sb.st_mode))
+ continue; /* next argv */
+ if (access(*argv, X_OK) == -1)
+ continue; /* next argv */
+ (void)printf("%s\n", *argv);
+ found++;
+ if (which)
+ continue; /* next argv */
+ } else 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);
+ len = snprintf(path, sizeof(path), "%s/%s", t, *argv);
+ if (p)
+ *p++ = ':';
+ if (len >= sizeof(path))
+ continue; /* next p */
+ if (stat(path, &sb) == -1)
+ continue; /* next p */
+ if (!S_ISREG(sb.st_mode))
+ continue; /* next p */
+ if (access(path, X_OK) == -1)
+ continue; /* next p */
+ (void)printf("%s\n", path);
+ found++;
+ if (which)
+ break; /* next argv */
+ }
+ }
+
+ return ((found == 0) ? 3 : ((found >= argc) ? 0 : 2));
+}
+
+static void
+usage(void)
+{
+
+ (void)fprintf(stderr, "Usage: %s [-ap] program [...]\n", getprogname());
+ exit(1);
+}
--- /dev/null
+.\" $NetBSD: which.1,v 1.2 2010/04/05 16:13:58 joerg Exp $
+.\"
+.\" Copyright (c) 1980, 1991 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. 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.
+.\"
+.\" from: @(#)which.1 6.3 (Berkeley) 4/23/91
+.\" $NetBSD: which.1,v 1.2 2010/04/05 16:13:58 joerg Exp $
+.\"
+.Dd April 23, 1991
+.Dt WHICH 1
+.Os
+.Sh NAME
+.Nm which
+.Nd "locate a program file in the users $PATH environment variable"
+.Sh SYNOPSIS
+.Nm
+.Op Fl a
+.Ar name
+.Op Ar ...
+.Sh DESCRIPTION
+.Nm
+takes a list of names and looks for the files which would be
+executed had these names been given as commands.
+Each argument is searched for along the user's
+.Ev PATH .
+.Pp
+If the
+.Fl a
+flag is given,
+.Nm
+will continue to search the
+.Ev PATH
+until all instances of a program file are found.
+.Sh HISTORY
+The
+.Nm
+command appeared in
+.Bx 3.0 .
+.Sh BUGS
+This implementation does not expand
+.Xr csh 1
+aliases, and is shell agnostic.
+This is really a feature.