summaryrefslogtreecommitdiff
path: root/sys/src/cmd/diff
diff options
context:
space:
mode:
authorOri Bernstein <ori@eigenstate.org>2023-04-01 20:40:26 +0000
committerOri Bernstein <ori@eigenstate.org>2023-04-01 20:40:26 +0000
commit3c53420eaeeeb4a0f388d706488097e97f01632d (patch)
treecd86d70d5d5004fbfe1091c0d83fd2ddf6fd9db5 /sys/src/cmd/diff
parent218f7a9ec7773484202d6fffb43b53f33524104c (diff)
diff: barf with explanation on binary diffs/merges
Diffstat (limited to 'sys/src/cmd/diff')
-rw-r--r--sys/src/cmd/diff/diff.h1
-rw-r--r--sys/src/cmd/diff/diffio.c10
-rw-r--r--sys/src/cmd/diff/diffreg.c14
-rw-r--r--sys/src/cmd/diff/merge3.c2
4 files changed, 18 insertions, 9 deletions
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);