summary refs log tree commit diff
diff options
context:
space:
mode:
authorChristian Neukirchen <chneukirchen@gmail.com>2015-01-28 14:36:02 +0100
committerChristian Neukirchen <chneukirchen@gmail.com>2015-01-28 14:36:02 +0100
commit6db4554340faa64ea3f94a4a4b067ff2fa90694f (patch)
treeb16144561d56edead218910d3a8bdc4267dfcf50
parentc9c371ec3ea85f25cfa5d31144689940d1f769a7 (diff)
downloadoutils-6db4554340faa64ea3f94a4a4b067ff2fa90694f.tar.gz
outils-6db4554340faa64ea3f94a4a4b067ff2fa90694f.tar.xz
outils-6db4554340faa64ea3f94a4a4b067ff2fa90694f.zip
add what(1)
-rw-r--r--Makefile4
-rw-r--r--README1
-rw-r--r--src/usr.bin/what/Makefile5
-rw-r--r--src/usr.bin/what/what.1107
-rw-r--r--src/usr.bin/what/what.c139
5 files changed, 255 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index e8cf890..4508751 100644
--- a/Makefile
+++ b/Makefile
@@ -5,7 +5,7 @@ LDFLAGS=-Wl,--as-needed -lcrypto
 %: %.o
 	$(CC) -o $@ $^ $(LDFLAGS)
 
-ALL=src/usr.bin/apply/apply src/usr.bin/jot/jot src/usr.bin/lam/lam src/usr.bin/lndir/lndir src/bin/md5/md5 src/usr.bin/rs/rs src/usr.bin/gzsig/gzsig src/usr.bin/signify/signify src/usr.bin/calendar/calendar src/usr.bin/vis/vis src/usr.bin/unvis/unvis src/usr.sbin/rdate/rdate
+ALL=src/usr.bin/apply/apply src/usr.bin/jot/jot src/usr.bin/lam/lam src/usr.bin/lndir/lndir src/bin/md5/md5 src/usr.bin/rs/rs src/usr.bin/gzsig/gzsig src/usr.bin/signify/signify src/usr.bin/calendar/calendar src/usr.bin/vis/vis src/usr.bin/unvis/unvis src/usr.bin/what/what src/usr.sbin/rdate/rdate 
 all: $(ALL)
 
 src/usr.bin/apply/apply: src/usr.bin/apply/apply.o src/liboutils/strlcpy.o
@@ -30,6 +30,8 @@ src/usr.bin/vis/vis: src/usr.bin/vis/vis.o src/usr.bin/vis/foldit.o src/liboutil
 
 src/usr.bin/unvis/unvis: src/usr.bin/unvis/unvis.o src/liboutils/unvis.o
 
+src/usr.bin/what/what: src/usr.bin/what/what.o src/liboutils/strlcpy.o
+
 src/usr.sbin/rdate/rdate: src/usr.sbin/rdate/ntp.o src/usr.sbin/rdate/rfc868time.o src/usr.sbin/rdate/rdate.o src/usr.sbin/rdate/ntpleaps.o src/liboutils/arc4random.o src/liboutils/reallocarray.c src/liboutils/getentropy_linux.o src/liboutils/explicit_bzero.o
 
 clean:
diff --git a/README b/README
index 3a1b1b7..21c038f 100644
--- a/README
+++ b/README
@@ -16,6 +16,7 @@ Included are:
      signify — cryptographically sign and verify files
      unvis — revert a visual representation of data back to original form
      vis — display non-printable characters in a visual format
+     what - show what versions of object modules were used to construct a file
 
                                                 Christian Neukirchen
                                               chneukirchen@gmail.com
diff --git a/src/usr.bin/what/Makefile b/src/usr.bin/what/Makefile
new file mode 100644
index 0000000..752492d
--- /dev/null
+++ b/src/usr.bin/what/Makefile
@@ -0,0 +1,5 @@
+#	$OpenBSD: Makefile,v 1.3 1997/09/21 11:51:58 deraadt Exp $
+
+PROG=	what
+
+.include <bsd.prog.mk>
diff --git a/src/usr.bin/what/what.1 b/src/usr.bin/what/what.1
new file mode 100644
index 0000000..076e7ab
--- /dev/null
+++ b/src/usr.bin/what/what.1
@@ -0,0 +1,107 @@
+.\"	$OpenBSD: what.1,v 1.19 2015/01/22 19:10:17 krw Exp $
+.\"	$NetBSD: what.1,v 1.3 1994/11/17 06:59:38 jtc Exp $
+.\"
+.\" Copyright (c) 1980, 1991, 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.
+.\"
+.\"     @(#)what.1	8.1 (Berkeley) 6/6/93
+.\"
+.Dd $Mdocdate: January 22 2015 $
+.Dt WHAT 1
+.Os
+.Sh NAME
+.Nm what
+.Nd show what versions of object modules were used to construct a file
+.Sh SYNOPSIS
+.Nm what
+.Op Fl s
+.Ar
+.Sh DESCRIPTION
+.Nm
+reads each
+.Ar file
+and searches for sequences of either the form
+.Sq $
+immediately followed by the system name (sysname) as defined by
+.Xr uname 3 ,
+or the form
+.Dq @(#)
+as inserted by the source code control system (SCCS).
+.Pp
+When
+.Sq $
+followed by the system name is encountered
+.Nm
+prints the remainder of the string up to a
+.Sq $
+or any non-printable character.
+.Pp
+When
+.Dq @(#)
+is encountered
+.Nm
+prints the remainder of the string, up to a NUL, newline, double
+quote, backslash, or
+.Sq >
+character.
+.Pp
+If the
+.Fl s
+option is specified, only the first occurrence of an identification string in
+each file is printed.
+.Sh EXIT STATUS
+The
+.Nm
+utility exits with a return value of 0 if any identification strings were found,
+or with a return value of 1 otherwise.
+.Sh STANDARDS
+The
+.Nm
+utility is compliant with the
+X/Open System Interfaces option of the
+.St -p1003.1-2008
+specification.
+.Pp
+Processing $sysname$ sequences is an
+.Ox
+extension.
+.Sh HISTORY
+The
+.Nm
+command appeared in
+.Bx 4.0 .
+.Sh BUGS
+As
+.Bx
+is not licensed to distribute
+.Tn SCCS ,
+this is a rewrite of the
+.Nm
+command which is part of
+.Tn SCCS .
+As such it may not behave exactly the same as that
+command does.
diff --git a/src/usr.bin/what/what.c b/src/usr.bin/what/what.c
new file mode 100644
index 0000000..0bad985
--- /dev/null
+++ b/src/usr.bin/what/what.c
@@ -0,0 +1,139 @@
+/*	$OpenBSD: what.c,v 1.13 2015/01/22 19:10:17 krw Exp $	*/
+/*	$NetBSD: what.c,v 1.4 1994/12/20 16:01:03 jtc Exp $	*/
+
+/*
+ * Copyright (c) 1980, 1988, 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/types.h>
+#include <sys/utsname.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <err.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+static void search(char *);
+static void usage(void);
+
+static int matches;
+static int sflag;
+
+extern char *__progname;
+
+/*
+ * what
+ */
+/* ARGSUSED */
+int
+main(int argc, char *argv[])
+{
+	struct utsname utsn;
+	char match[256];
+	int c;
+
+	matches = sflag = 0;
+	while ((c = getopt(argc, argv, "s")) != -1) {
+		switch (c) {
+		case 's':
+			sflag = 1;
+			break;
+		default:
+			usage();
+		}
+	}
+	argc -= optind;
+	argv += optind;
+
+	if (uname(&utsn) == -1)
+		err(1, "uname");
+	strlcpy(match, utsn.sysname, sizeof match);
+
+	if (argc < 1) {
+		usage();
+	} else do {
+		if (!freopen(*argv, "r", stdin)) {
+			perror(*argv);
+			exit(matches ? 0 : 1);
+		}
+		printf("%s\n", *argv);
+		search(match);
+	} while(*++argv);
+	exit(matches ? 0 : 1);
+}
+
+static void
+search(char *match)
+{
+	int c;
+	int i;
+
+	while ((c = getchar()) != EOF) {
+loop:		if (c == '$') {
+			for (i = 0; match[i]; i++)
+				if ((c = getchar()) != match[i])
+					goto loop;
+			printf("\t$%s", match);
+			while (isprint(c = getchar())) {
+				putchar(c);
+				if (c == '$')
+					break;
+			}
+			putchar('\n');
+			matches++;
+			if (sflag)
+				break;
+			goto loop;
+		}
+		if (c != '@')
+			continue;
+		if ((c = getchar()) != '(')
+			goto loop;
+		if ((c = getchar()) != '#')
+			goto loop;
+		if ((c = getchar()) != ')')
+			goto loop;
+		putchar('\t');
+		while ((c = getchar()) != EOF && c && c != '"' &&
+		    c != '>' && c != '\n' && c != '\\')
+			putchar(c);
+		putchar('\n');
+		matches++;
+		if (sflag)
+			break;
+	}
+}
+
+static void
+usage(void)
+{
+
+	(void)fprintf(stderr, "usage: %s [-s] file ...\n", __progname);
+	exit(1);
+}