--- 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 - 15:12:02 CEST