summaryrefslogtreecommitdiff
path: root/sys/src/cmd/diff
diff options
context:
space:
mode:
authorOri Bernstein <ori@eigenstate.org>2022-05-22 16:41:47 +0000
committerOri Bernstein <ori@eigenstate.org>2022-05-22 16:41:47 +0000
commit23f8872bc10fbe9ffd2b0067db1f91d8eaaabb40 (patch)
tree5ce18180712620a7526e5e5634b4e9ae3630c80f /sys/src/cmd/diff
parent4649189126e1ad98f9a07afd078096227668bfd1 (diff)
diff: retain original file names
When diffing non-regular files, like /dev/null, pipes, and similar, diff will generate a temp file to diff against. This is the right thing to do, but the temp file leaks into the diff. This patch retains the original file name all the way through to diff output.
Diffstat (limited to 'sys/src/cmd/diff')
-rw-r--r--sys/src/cmd/diff/diff.h4
-rw-r--r--sys/src/cmd/diff/diffio.c9
-rw-r--r--sys/src/cmd/diff/diffreg.c6
-rw-r--r--sys/src/cmd/diff/main.c6
4 files changed, 12 insertions, 13 deletions
diff --git a/sys/src/cmd/diff/diff.h b/sys/src/cmd/diff/diff.h
index 370dccb20..8aca0439f 100644
--- a/sys/src/cmd/diff/diff.h
+++ b/sys/src/cmd/diff/diff.h
@@ -23,8 +23,8 @@ void *emalloc(unsigned);
void *erealloc(void *, unsigned);
void diff(char *, char *, int);
void diffdir(char *, char *, int);
-void diffreg(char *, char *);
-Biobuf *prepare(int, char *);
+void diffreg(char *, char *, char *, char *);
+Biobuf *prepare(int, char *, char *);
void panic(int, char *, ...);
void check(Biobuf *, Biobuf *);
void change(int, int, int, int);
diff --git a/sys/src/cmd/diff/diffio.c b/sys/src/cmd/diff/diffio.c
index b5b4964c1..f9608d8d5 100644
--- a/sys/src/cmd/diff/diffio.c
+++ b/sys/src/cmd/diff/diffio.c
@@ -104,7 +104,7 @@ readhash(Biobuf *bp, char *buf)
}
Biobuf *
-prepare(int i, char *arg)
+prepare(int i, char *arg, char *orig)
{
Line *p;
int j, h;
@@ -143,11 +143,10 @@ prepare(int i, char *arg)
file[i] = p;
input[i] = bp; /*fix*/
if (i == 0) { /*fix*/
- file1 = arg;
+ file1 = orig;
firstchange = 0;
- }
- else
- file2 = arg;
+ } else
+ file2 = orig;
return bp;
}
diff --git a/sys/src/cmd/diff/diffreg.c b/sys/src/cmd/diff/diffreg.c
index 1b8f4e5be..4d90c40ca 100644
--- a/sys/src/cmd/diff/diffreg.c
+++ b/sys/src/cmd/diff/diffreg.c
@@ -363,16 +363,16 @@ cmp(Biobuf* b1, Biobuf* b2)
}
void
-diffreg(char *f, char *t)
+diffreg(char *f, char *fo, char *t, char *to)
{
Biobuf *b0, *b1;
int k;
binary = 0;
- b0 = prepare(0, f);
+ b0 = prepare(0, f, fo);
if (!b0)
return;
- b1 = prepare(1, t);
+ b1 = prepare(1, t, to);
if (!b1) {
Bterm(b0);
return;
diff --git a/sys/src/cmd/diff/main.c b/sys/src/cmd/diff/main.c
index d91c85561..385537207 100644
--- a/sys/src/cmd/diff/main.c
+++ b/sys/src/cmd/diff/main.c
@@ -149,7 +149,7 @@ diff(char *f, char *t, int level)
Bprint(&stdout, "Common subdirectories: %s and %s\n", fp, tp);
}
else if (REGULAR_FILE(fsb) && REGULAR_FILE(tsb))
- diffreg(fp, tp);
+ diffreg(fp, f, tp, t);
else {
if (REGULAR_FILE(fsb)) {
if ((p = utfrrune(f, '/')) == 0)
@@ -157,14 +157,14 @@ diff(char *f, char *t, int level)
else
p++;
if (mkpathname(tb, tp, p) == 0)
- diffreg(fp, tb);
+ diffreg(fp, f, tb, t);
} else {
if ((p = utfrrune(t, '/')) == 0)
p = t;
else
p++;
if (mkpathname(fb, fp, p) == 0)
- diffreg(fb, tp);
+ diffreg(fb, f, tp, t);
}
}
free(fsb);