From 3c53420eaeeeb4a0f388d706488097e97f01632d Mon Sep 17 00:00:00 2001 From: Ori Bernstein Date: Sat, 1 Apr 2023 20:40:26 +0000 Subject: diff: barf with explanation on binary diffs/merges --- sys/src/cmd/diff/diff.h | 1 + sys/src/cmd/diff/diffio.c | 10 +++++----- sys/src/cmd/diff/diffreg.c | 14 ++++++++++---- sys/src/cmd/diff/merge3.c | 2 ++ 4 files changed, 18 insertions(+), 9 deletions(-) (limited to 'sys/src') diff --git a/sys/src/cmd/diff/diff.h b/sys/src/cmd/diff/diff.h index df1038356..3381ccbe1 100644 --- a/sys/src/cmd/diff/diff.h +++ b/sys/src/cmd/diff/diff.h @@ -27,6 +27,7 @@ struct Diff { Line *file[2], line; int len[2]; int binary; + int bindiff; Line *sfile[2]; /*shortened by pruning common prefix and suffix*/ int slen[2]; int pref, suff; /*length of prefix and suffix*/ diff --git a/sys/src/cmd/diff/diffio.c b/sys/src/cmd/diff/diffio.c index e8f9232a0..ec24f95f4 100644 --- a/sys/src/cmd/diff/diffio.c +++ b/sys/src/cmd/diff/diffio.c @@ -109,6 +109,11 @@ prepare(Diff *d, int i, char *arg, char *orig) int nbytes; Rune r; + if (i == 0) { + d->file1 = orig; + d->firstchange = 0; + } else + d->file2 = orig; bp = Bopen(arg, OREAD); if (!bp) { sysfatal("cannot open %s: %r", arg); @@ -138,11 +143,6 @@ prepare(Diff *d, int i, char *arg, char *orig) d->len[i] = j; d->file[i] = p; d->input[i] = bp; - if (i == 0) { - d->file1 = orig; - d->firstchange = 0; - } else - d->file2 = orig; return bp; } diff --git a/sys/src/cmd/diff/diffreg.c b/sys/src/cmd/diff/diffreg.c index a89a4ef26..1cfdd14cc 100644 --- a/sys/src/cmd/diff/diffreg.c +++ b/sys/src/cmd/diff/diffreg.c @@ -315,8 +315,8 @@ calcdiff(Diff *d, char *f, char *fo, char *t, char *to) } if (d->binary){ // could use b0 and b1 but this is simpler. - if (cmp(b0, b1)) - print("binary files %s %s differ\n", f, t); + if(cmp(b0, b1)) + d->bindiff = 1; Bterm(b0); Bterm(b1); return; @@ -356,6 +356,10 @@ output(Diff *d) { int m, i0, i1, j0, j1; + if(d->bindiff){ + print("binary files %s %s differ\n", d->file1, d->file2); + return; + } m = d->len[0]; d->J[0] = 0; d->J[m+1] = d->len[1]+1; @@ -403,8 +407,10 @@ diffreg(char *f, char *fo, char *t, char *to) void freediff(Diff *d) { - Bterm(d->input[0]); - Bterm(d->input[1]); + if(d->input[0] != nil) + Bterm(d->input[0]); + if(d->input[1] != nil) + Bterm(d->input[1]); free(d->J); free(d->ixold); free(d->ixnew); diff --git a/sys/src/cmd/diff/merge3.c b/sys/src/cmd/diff/merge3.c index 08090e620..ffcdc183d 100644 --- a/sys/src/cmd/diff/merge3.c +++ b/sys/src/cmd/diff/merge3.c @@ -162,6 +162,8 @@ main(int argc, char **argv) memset(&r, 0, sizeof(r)); calcdiff(&l, argv[1], argv[1], argv[0], argv[0]); calcdiff(&r, argv[1], argv[1], argv[2], argv[2]); + if(l.binary || r.binary) + sysfatal("cannot merge binaries"); x = merge(&l, &r); freediff(&l); freediff(&r); -- cgit v1.2.3