Check stdin for binary too
This commit is contained in:
parent
219075499f
commit
c713312b22
@ -2,7 +2,7 @@
|
||||
#define ARG_H
|
||||
#include <stdbool.h>
|
||||
|
||||
#define LAT_VERSION "0.10.1"
|
||||
#define LAT_VERSION "0.10.2"
|
||||
|
||||
struct config {
|
||||
bool stdin;
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user