ref: b826eb72d908ce009bb4af9c458fd4d206a1bb9f
parent: f8b6848a79ecd2c5871ec1629cf763a82bb8371f
author: Ori Bernstein <ori@eigenstate.org>
date: Sun May 22 12:41:47 EDT 2022
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.
--- a/sys/src/cmd/diff/diff.h
+++ b/sys/src/cmd/diff/diff.h
@@ -23,8 +23,8 @@
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);
--- a/sys/src/cmd/diff/diffio.c
+++ b/sys/src/cmd/diff/diffio.c
@@ -104,7 +104,7 @@
}
Biobuf *
-prepare(int i, char *arg)
+prepare(int i, char *arg, char *orig)
{
Line *p;
int j, h;
@@ -143,11 +143,10 @@
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;
}
--- a/sys/src/cmd/diff/diffreg.c
+++ b/sys/src/cmd/diff/diffreg.c
@@ -363,16 +363,16 @@
}
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;
--- a/sys/src/cmd/diff/main.c
+++ b/sys/src/cmd/diff/main.c
@@ -149,7 +149,7 @@
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,7 +157,7 @@
else
p++;
if (mkpathname(tb, tp, p) == 0)
- diffreg(fp, tb);
+ diffreg(fp, f, tb, t);
} else {
if ((p = utfrrune(t, '/')) == 0)
p = t;
@@ -164,7 +164,7 @@
else
p++;
if (mkpathname(fb, fp, p) == 0)
- diffreg(fb, tp);
+ diffreg(fb, f, tp, t);
}
}
free(fsb);
--
⑨