From c713312b2281787030602e6d1e10d5a65cd2dbce Mon Sep 17 00:00:00 2001 From: Shav Kinderlehrer Date: Wed, 19 Apr 2023 13:28:06 -0400 Subject: [PATCH] Check stdin for binary too --- include/arg.h | 2 +- src/lib/file.c | 33 ++++++++++++++++++++------------- src/main.c | 7 ++++--- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/include/arg.h b/include/arg.h index 3a6fe22..ba47a27 100644 --- a/include/arg.h +++ b/include/arg.h @@ -2,7 +2,7 @@ #define ARG_H #include -#define LAT_VERSION "0.10.1" +#define LAT_VERSION "0.10.2" struct config { bool stdin; diff --git a/src/lib/file.c b/src/lib/file.c index 865bc98..73b76ce 100644 --- a/src/lib/file.c +++ b/src/lib/file.c @@ -5,6 +5,23 @@ #include "types.h" #include "util.h" +bool isbinary(struct filedata *f) { + + // guess if printable + // from https://github.com/sharkdp/content_inspector/blob/master/src/lib.rs + int testlen = f->buflen >= 64 ? 64 : f->buflen; + char *testbuf[testlen]; + memcpy(testbuf, f->buf, testlen); + + char *result = memchr(testbuf, 0x00, testlen); + + if (result) { + return true; + } else { + return false; + } +} + struct filedata readfile(FILE *fp, bool isstdin) { struct filedata f; @@ -44,6 +61,8 @@ struct filedata readfile(FILE *fp, bool isstdin) { } f.buf[f.buflen] = '\0'; + f.binary = isbinary(&f); + return f; } @@ -60,19 +79,7 @@ struct filedata readfile(FILE *fp, bool isstdin) { die("fread"); } - // guess if printable - // from https://github.com/sharkdp/content_inspector/blob/master/src/lib.rs - int testlen = f.buflen >= 64 ? 64 : f.buflen; - char *testbuf[testlen]; - memcpy(testbuf, f.buf, testlen); - - char *result = memchr(testbuf, 0x00, testlen); - - if (result) { - f.binary = 1; - } else { - f.binary = 0; - } + f.binary = isbinary(&f); return f; } diff --git a/src/main.c b/src/main.c index 3758713..42ebe6e 100644 --- a/src/main.c +++ b/src/main.c @@ -42,11 +42,11 @@ void run(FILE *fp, char *filename, bool tty) { if (conf.headers) { char *addon = f.binary ? "" : ""; - if (!conf.pager) + if (conf.pager) + fprintf(err, "%s%s%s%s\r\n", invert_t, basename(filename), addon, reset); + else fprintf(err, "\x1b[2K\r%s%s%s%s\r\n", invert_t, basename(filename), addon, reset); - else - fprintf(err, "%s%s%s%s\r\n", invert_t, basename(filename), addon, reset); } conf.process = (tty && !f.binary); @@ -147,6 +147,7 @@ int main(int argc, char *argv[]) { run(fp, argv[i], tty); fclose(fp); if (tty && (i + 1 != argc)) { + printf("offset: %d argc: %d\n", i, argc); fprintf(err, "\r\n"); // separate concurrent files in tty } }