Commit Diff


commit - e84044be84489b6f4f9ce69d0d6eba6cac66a9b6
commit + eb5d2a54d5ee79118c8081c7de3409f93e500b54
blob - c9446d6b9108992da4d2888d6d6f45204ab428a5
blob + b6c696abc6215676bd592f97d009fcc2cf55775b
--- src/cmd/diff/diffdir.c
+++ src/cmd/diff/diffdir.c
@@ -19,8 +19,10 @@ scandir(char *name)
 	int nitems;
 	int fd, n;
 
-	if ((fd = open(name, OREAD)) < 0)
-		panic(2, "can't open %s\n", name);
+	if ((fd = open(name, OREAD)) < 0){
+		panic(mflag ? 0 : 2, "can't open %s\n", name);
+		return nil;
+	}
 	cp = 0;
 	nitems = 0;
 	if((n = dirreadall(fd, &db)) > 0){
@@ -63,6 +65,8 @@ diffdir(char *f, char *t, int level)
 	dt = scandir(t);
 	dirf = df;
 	dirt = dt;
+	if(df == nil || dt == nil)
+		goto Out;
 	while (*df || *dt) {
 		from = *df;
 		to = *dt;
@@ -99,9 +103,10 @@ diffdir(char *f, char *t, int level)
 		diff(fb, tb, level+1);
 		df++; dt++;
 	}
-	for (df = dirf; *df; df++)
+Out:
+	for (df = dirf; df && *df; df++)
 		FREE(*df);
-	for (dt = dirt; *dt; dt++)
+	for (dt = dirt; dt && *dt; dt++)
 		FREE(*dt);
 	FREE(dirf);
 	FREE(dirt);
blob - a80f76e10d3e723045050392107d1067247fe51c
blob + 408ad90f517c0bf6d19086b55542ce37de553fa8
--- src/cmd/diff/main.c
+++ src/cmd/diff/main.c
@@ -183,7 +183,9 @@ main(int argc, char *argv[])
 	char *p;
 	int i;
 	Dir *fsb, *tsb;
-
+	extern int _p9usepwlibrary;
+	
+	_p9usepwlibrary = 0;
 	Binit(&stdout, 1, OWRITE);
 	progname = *argv;
 	while (--argc && (*++argv)[0] == '-' && (*argv)[1]) {
@@ -208,6 +210,7 @@ main(int argc, char *argv[])
 
 			case 'r':
 				rflag = 1;
+				mflag = 1;
 				break;
 
 			case 'm':