shithub: riscv

Download patch

ref: 23f8872bc10fbe9ffd2b0067db1f91d8eaaabb40
parent: 4649189126e1ad98f9a07afd078096227668bfd1
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);