diff options
author | rsc <devnull@localhost> | 2005-01-29 16:50:51 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2005-01-29 16:50:51 +0000 |
commit | a2d6635774d29561984a85d59c60d23ece3a0af7 (patch) | |
tree | 7b6d02db950256ccd4a1d5072e53668dde3f198e /src/cmd/diff/diffio.c | |
parent | 33baa59ecc75651b3666cef7a5b19eb91840d40c (diff) | |
download | plan9port-a2d6635774d29561984a85d59c60d23ece3a0af7.tar.gz plan9port-a2d6635774d29561984a85d59c60d23ece3a0af7.tar.bz2 plan9port-a2d6635774d29561984a85d59c60d23ece3a0af7.zip |
add diff -a
Diffstat (limited to 'src/cmd/diff/diffio.c')
-rw-r--r-- | src/cmd/diff/diffio.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/src/cmd/diff/diffio.c b/src/cmd/diff/diffio.c index 5317539b..80371144 100644 --- a/src/cmd/diff/diffio.c +++ b/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<nchanges; ){ j = changeset(i); - a = changes[i].a; - b = changes[j-1].b; - c = changes[i].c; - d = changes[j-1].d; + a = changes[i].a-Lines; + b = changes[j-1].b+Lines; + c = changes[i].c-Lines; + d = changes[j-1].d+Lines; + if(a < 1) + a = 1; + if(c < 1) + c = 1; + if(b > 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<j; i++){ fetch(ixold, at, changes[i].a-1, input[0], " "); fetch(ixold, changes[i].a, changes[i].b, input[0], "< "); fetch(ixnew, changes[i].c, changes[i].d, input[1], "> "); at = changes[i].b+1; } - fetch(ixold, at, b+Lines, input[0], " "); + fetch(ixold, at, b, input[0], " "); } nchanges = 0; } |