diff options
author | Leah Neukirchen <leah@vuxu.org> | 2017-08-21 18:19:23 +0200 |
---|---|---|
committer | Leah Neukirchen <leah@vuxu.org> | 2017-08-21 18:19:23 +0200 |
commit | de5d95e0fb849c74e05a865fa2c2e1abf7800cf9 (patch) | |
tree | e9afdb8fe38e3e6edf75014ad3e02987d02b1c60 /holes.c | |
parent | 1af374e8892e97d0c2e826a5de0ad7b37fe9238f (diff) | |
download | holes-de5d95e0fb849c74e05a865fa2c2e1abf7800cf9.tar.gz holes-de5d95e0fb849c74e05a865fa2c2e1abf7800cf9.tar.xz holes-de5d95e0fb849c74e05a865fa2c2e1abf7800cf9.zip |
Add -b to change which byte is tested
Diffstat (limited to 'holes.c')
-rw-r--r-- | holes.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/holes.c b/holes.c index c618a8e..41fc50c 100644 --- a/holes.c +++ b/holes.c @@ -7,7 +7,8 @@ #include <unistd.h> ssize_t minlen = 64; -int ret; +char byte = 0; +int ret = 0; char *argv0; void @@ -18,7 +19,7 @@ holes(FILE *input, char *filename) int ch; while ((ch = getc_unlocked(input)) != EOF) { - if (ch == 0) { + if (ch == byte) { run++; } else { if (run >= minlen) { @@ -49,12 +50,24 @@ int main(int argc, char *argv[]) { int c, i; + long b; char *e; argv0 = argv[0]; - while ((c = getopt(argc, argv, "n:")) != -1) + while ((c = getopt(argc, argv, "b:n:")) != -1) switch(c) { + case 'b': + errno = 0; + b = strtol(optarg, &e, 0); + if (errno != 0 || *e || b < 0 || b > 256) { + fprintf(stderr, + "%s: can't parse byte '%s'.\n", + argv0, optarg); + exit(2); + } + byte = b; + break; case 'n': errno = 0; minlen = strtoll(optarg, &e, 0); @@ -73,7 +86,8 @@ main(int argc, char *argv[]) break; default: fprintf(stderr, - "Usage: %s [-n MINLEN] [FILES...]\n", argv0); + "Usage: %s [-b BYTE] [-n MINLEN] [FILES...]\n", + argv0); exit(2); } |