---
Makefile | 1 +
strings.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 71 insertions(+)
create mode 100644 strings.c
diff --git a/Makefile b/Makefile
index 33c78a0..6bc091a 100644
--- a/Makefile
+++ b/Makefile
_AT_@ -70,6 +70,7 @@ SRC = \
sort.c \
split.c \
sponge.c \
+ strings.c \
sync.c \
tail.c \
tar.c \
diff --git a/strings.c b/strings.c
new file mode 100644
index 0000000..a2a2a06
--- /dev/null
+++ b/strings.c
_AT_@ -0,0 +1,70 @@
+/* See LICENSE file for copyright and license details. */
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include "util.h"
+
+static void dostrings(int fd, const char *fname);
+
+static void
+usage(void)
+{
+ eprintf("usage: %s file\n", argv0);
+}
+
+int
+main(int argc, char *argv[])
+{
+ int fd;
+
+ ARGBEGIN {
+ default:
+ usage();
+ } ARGEND;
+
+ if (argc > 0) {
+ if ((fd = open(argv[0], O_RDONLY)) < 0)
+ eprintf("open %s:", argv[0]);
+ dostrings(fd, argv[0]);
+ close(fd);
+ } else {
+ dostrings(STDIN_FILENO, "<stdin>");
+ }
+
+ return 0;
+}
+
+static void
+dostrings(int fd, const char *fname)
+{
+ ssize_t r;
+ unsigned char buf[BUFSIZ], c;
+ int span = 0, i = 0;
+ off_t offset = 0;
+
+ while ((r = read(fd, &c, 1) > 0)) {
+ offset++;
+ if (isprint(c)) {
+ span++;
+ buf[i++] = c;
+ if (i == sizeof(buf) - 1) {
+ printf("%8ld: %.*s\n",
+ (long)offset - i - 1,
+ i, buf);
+ span = i = 0;
+ }
+ } else {
+ if (span >= 6) {
+ printf("%8ld: %.*s\n",
+ (long)offset - i - 1,
+ i, buf);
+ }
+ span = i = 0;
+ }
+ }
+ if (r < 0)
+ eprintf("%s: read error:", fname);
+}
--
1.8.2.3
--liOOAslEiF7prFVr--
Received on Mon Sep 17 2001 - 00:00:00 CEST
This archive was generated by hypermail 2.3.0 : Wed Aug 14 2013 - 12:00:09 CEST