Hi,

Fixed to use libc I/O.  No manpage yet.

David, what you think of my other id(1) patch?

Thanks,
sin
>From 520d7a64cd2c40c1c63ce7ea1d954b5efb166c98 Mon Sep 17 00:00:00 2001
From: sin <s...@2f30.org>
Date: Wed, 14 Aug 2013 10:41:55 +0100
Subject: [PATCH] Add strings(1)

---
 Makefile  |  1 +
 strings.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 66 insertions(+)
 create mode 100644 strings.c

diff --git a/Makefile b/Makefile
index 33c78a0..6bc091a 100644
--- a/Makefile
+++ b/Makefile
@@ -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..4cab40e
--- /dev/null
+++ b/strings.c
@@ -0,0 +1,65 @@
+/* See LICENSE file for copyright and license details. */
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include "util.h"
+
+static void dostrings(FILE *fp, const char *fname);
+
+static void
+usage(void)
+{
+       eprintf("usage: %s file\n", argv0);
+}
+
+int
+main(int argc, char *argv[])
+{
+       FILE *fp;
+
+       ARGBEGIN {
+       default:
+               usage();
+       } ARGEND;
+
+       if (argc > 0) {
+               if (!(fp = fopen(argv[0], "r")))
+                       eprintf("open %s:", argv[0]);
+               dostrings(fp, argv[0]);
+               fclose(fp);
+       } else {
+               dostrings(stdin, "<stdin>");
+       }
+
+       return 0;
+}
+
+static void
+dostrings(FILE *fp, const char *fname)
+{
+       unsigned char buf[BUFSIZ];
+       int c;
+       int span = 0, i = 0;
+       off_t offset = 0;
+
+       while ((c = getc(fp)) != EOF) {
+               offset++;
+               if (isprint(c)) {
+                       span++;
+                       buf[i++] = c;
+                       if (i == sizeof(buf) - 1) {
+                               buf[i] = '\0';
+                               printf("%8ld: %s\n", (long)offset - i - 1, buf);
+                               span = i = 0;
+                       }
+               } else {
+                       if (span >= 6) {
+                               buf[i] = '\0';
+                               printf("%8ld: %s\n", (long)offset - i - 1, buf);
+                       }
+                       span = i = 0;
+               }
+       }
+       if (ferror(fp))
+               eprintf("%s read error:", fname);
+}
-- 
1.8.3.4

Reply via email to