diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/file.c | 33 | ||||
-rw-r--r-- | src/main.c | 7 |
2 files changed, 24 insertions, 16 deletions
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; } @@ -42,11 +42,11 @@ void run(FILE *fp, char *filename, bool tty) { if (conf.headers) { char *addon = f.binary ? "<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 } } |