commit a2d6635774d29561984a85d59c60d23ece3a0af7 from: rsc date: Sat Jan 29 16:50:51 2005 UTC add diff -a commit - 33baa59ecc75651b3666cef7a5b19eb91840d40c commit + a2d6635774d29561984a85d59c60d23ece3a0af7 blob - 5317539b958e19e75e473642d00973d6256a8904 blob + 803711442bd37fdd18f90fc48a92b1d5a100dc62 --- src/cmd/diff/diffio.c +++ src/cmd/diff/diffio.c @@ -302,6 +302,7 @@ change(int a, int b, int c, int d) range(a, b, " "); break; case 'c': + case 'a': if(nchanges%1024 == 0) changes = erealloc(changes, (nchanges+1024)*sizeof(changes[0])); ch = &changes[nchanges++]; @@ -348,24 +349,39 @@ flushchanges(void) for(i=0; i len[0]) + b = len[0]; + if(d > len[1]) + d = len[1]; + if(mode == 'a'){ + a = 1; + b = len[0]; + c = 1; + d = len[1]; + j = nchanges; + } Bprint(&stdout, "%s:", file1); range(a, b, ","); Bprint(&stdout, " - "); Bprint(&stdout, "%s:", file2); range(c, d, ","); Bputc(&stdout, '\n'); - at = a-Lines; + at = a; for(; i "); at = changes[i].b+1; } - fetch(ixold, at, b+Lines, input[0], " "); + fetch(ixold, at, b, input[0], " "); } nchanges = 0; } blob - ab114d4d8ee56b1099a3be0e36491a13d50b9dba blob + d1ed1249e2b0c58e05d58382ce145354abff5028 --- src/cmd/diff/main.c +++ src/cmd/diff/main.c @@ -8,7 +8,7 @@ Biobuf stdout; -static char *tmp[] = {"/tmp/diff1", "/tmp/diff2"}; +static char *tmp[] = {"/tmp/diff1XXXXXXXXXXX", "/tmp/diff2XXXXXXXXXXX"}; static int whichtmp; static char *progname; static char usage[] = "diff [ -efmnbwr ] file1 ... file2\n"; @@ -26,8 +26,6 @@ void done(int status) { rmtmpfiles(); -Bflush(&stdout); -Bterm(&stdout); switch(status) { case 0: @@ -83,8 +81,11 @@ mktmpfile(int input, Dir **sb) char buf[8192]; atnotify(catch, 1); - p = tmp[whichtmp++]; +/* + p = mktemp(tmp[whichtmp++]); fd = create(p, OWRITE, 0600); +*/ + fd = mkstemp(p=tmp[whichtmp++]); if (fd < 0) { panic(mflag ? 0: 2, "cannot create %s: %r\n", p); return 0; @@ -172,7 +173,6 @@ diff(char *f, char *t, int level) } free(fsb); free(tsb); - Return: rmtmpfiles(); } @@ -189,10 +189,12 @@ main(int argc, char *argv[]) while (--argc && (*++argv)[0] == '-' && (*argv)[1]) { for (p = *argv+1; *p; p++) { switch (*p) { - case 'c': + case 'e': case 'f': case 'n': + case 'c': + case 'a': mode = *p; break; @@ -238,7 +240,6 @@ main(int argc, char *argv[]) free(tsb); for (i = 0; i < argc-1; i++) diff(argv[i], argv[argc-1], 0); - done(anychange); /*NOTREACHED*/ }