Date: Thu, 19 Jul 2012 17:30:44 +0000 From: jhagewood@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r239582 - in soc2012/jhagewood/diff3: . diff3 Message-ID: <20120719173044.65A4D1065673@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jhagewood Date: Thu Jul 19 17:30:43 2012 New Revision: 239582 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=239582 Log: Fixed file open bug in diff3 Modified: soc2012/jhagewood/diff3/TODO soc2012/jhagewood/diff3/diff3/diff3prog.c soc2012/jhagewood/diff3/hagewood-diff3.patch Modified: soc2012/jhagewood/diff3/TODO ============================================================================== --- soc2012/jhagewood/diff3/TODO Thu Jul 19 15:36:36 2012 (r239581) +++ soc2012/jhagewood/diff3/TODO Thu Jul 19 17:30:43 2012 (r239582) @@ -5,3 +5,9 @@ --strip-trailing-cr COMPLETE --diff-program INCOMPLETE Fixed binary detection COMPLETE +Test script COMPLETE + +- BUG: Goes to usage when argc < 5 FIX: argc < 3 +- BUG: Would not open files correctly FIX: change which argv[] is passed +to fopen() +- BUG: Seg faults. Modified: soc2012/jhagewood/diff3/diff3/diff3prog.c ============================================================================== --- soc2012/jhagewood/diff3/diff3/diff3prog.c Thu Jul 19 15:36:36 2012 (r239581) +++ soc2012/jhagewood/diff3/diff3/diff3prog.c Thu Jul 19 17:30:43 2012 (r239582) @@ -165,6 +165,8 @@ DIFFPROG_OPT, }; +#define MAX_CHECK 768 /* 3 kilobytes of chars. */ + #define OPTIONS "3aAeEiL:mTvxX" static struct option longopts[] = { { "ed", no_argument, NULL, 'e' }, @@ -189,7 +191,7 @@ int main(int argc, char **argv) { - int ch, i, m, n; + int ch, i, j, m, n; eflag = 0; oflag = 0; @@ -245,8 +247,7 @@ } argc -= optind; argv += optind; - /* XXX - argc usage seems wrong here */ - if (argc < 5) + if (argc < 3) usage(); if (oflag) { (void)snprintf(f1mark, sizeof(f1mark), "<<<<<<< %s", @@ -262,11 +263,13 @@ increase(); m = readin(argv[0], &d13); n = readin(argv[1], &d23); - for (i = 0; i <= 2; i++) { - if ((fp[i] = fopen(argv[i + 2], "r")) == NULL) - err(EXIT_FAILURE, "can't open %s", argv[i + 2]); + j = 0; + for (i = 2; i >= 0; i++) { + if ((fp[j] = fopen(argv[(argc-1)-i], "r")) == NULL) + err(EXIT_FAILURE, "Can't open %s", argv[(argc-1)-i]); if (strip_cr) - remove_cr(fp[i]); + remove_cr(fp[j]); + j++; } merge(m, n); exit(EXIT_SUCCESS); Modified: soc2012/jhagewood/diff3/hagewood-diff3.patch ============================================================================== --- soc2012/jhagewood/diff3/hagewood-diff3.patch Thu Jul 19 15:36:36 2012 (r239581) +++ soc2012/jhagewood/diff3/hagewood-diff3.patch Thu Jul 19 17:30:43 2012 (r239582) @@ -11,7 +11,7 @@ .include <bsd.prog.mk> diff -rupN jhagewood/diff3/diff3-orig/diff3prog.c jhagewood/diff3/diff3/diff3prog.c --- jhagewood/diff3/diff3-orig/diff3prog.c 2012-07-18 16:22:12.000000000 -0400 -+++ jhagewood/diff3/diff3/diff3prog.c 2012-07-18 16:23:30.267560000 -0400 ++++ jhagewood/diff3/diff3/diff3prog.c 2012-07-19 17:13:54.000000000 -0400 @@ -64,19 +64,23 @@ * @(#)diff3.c 8.1 (Berkeley) 6/6/93 */ @@ -52,7 +52,7 @@ * is stored in last[1-3]; */ int last[4]; -@@ -134,29 +138,31 @@ int strip_cr; +@@ -134,31 +138,35 @@ int strip_cr; int debug = 0; char f1mark[40], f2mark[40], f3mark[40]; /* markers for -E and -X */ @@ -102,8 +102,12 @@ + DIFFPROG_OPT, }; ++#define MAX_CHECK 768 /* 3 kilobytes of chars. */ ++ #define OPTIONS "3aAeEiL:mTvxX" -@@ -166,19 +172,20 @@ static struct option longopts[] = { + static struct option longopts[] = { + { "ed", no_argument, NULL, 'e' }, +@@ -166,23 +174,24 @@ static struct option longopts[] = { { "overlap-only", no_argument, NULL, 'x' }, { "initial-tab", no_argument, NULL, 'T' }, { "text", no_argument, NULL, 'a' }, @@ -129,7 +133,12 @@ int main(int argc, char **argv) { -@@ -216,12 +223,18 @@ main(int argc, char **argv) +- int ch, i, m, n; ++ int ch, i, j, m, n; + + eflag = 0; + oflag = 0; +@@ -216,12 +225,18 @@ main(int argc, char **argv) case 'X': oflag = eflag = 1; break; @@ -148,15 +157,19 @@ case STRIPCR_OPT: strip_cr = 1; break; -@@ -235,7 +248,6 @@ main(int argc, char **argv) - /* XXX - argc usage seems wrong here */ - if (argc < 5) +@@ -232,10 +247,8 @@ main(int argc, char **argv) + } + argc -= optind; + argv += optind; +- /* XXX - argc usage seems wrong here */ +- if (argc < 5) ++ if (argc < 3) usage(); - if (oflag) { (void)snprintf(f1mark, sizeof(f1mark), "<<<<<<< %s", labels[0] != NULL ? labels[0] : -@@ -247,13 +259,14 @@ main(int argc, char **argv) +@@ -247,13 +260,16 @@ main(int argc, char **argv) labels[2] != NULL ? labels[2] : argc >= 7 ? argv[6] : argv[4]); } @@ -164,15 +177,20 @@ increase(); m = readin(argv[0], &d13); n = readin(argv[1], &d23); - for (i = 0; i <= 2; i++) { - if ((fp[i] = fopen(argv[i + 2], "r")) == NULL) - err(EXIT_FAILURE, "can't open %s", argv[i + 2]); +- for (i = 0; i <= 2; i++) { +- if ((fp[i] = fopen(argv[i + 2], "r")) == NULL) +- err(EXIT_FAILURE, "can't open %s", argv[i + 2]); ++ j = 0; ++ for (i = 2; i >= 0; i++) { ++ if ((fp[j] = fopen(argv[(argc-1)-i], "r")) == NULL) ++ err(EXIT_FAILURE, "Can't open %s", argv[(argc-1)-i]); + if (strip_cr) -+ remove_cr(fp[i]); ++ remove_cr(fp[j]); ++ j++; } merge(m, n); exit(EXIT_SUCCESS); -@@ -265,7 +278,7 @@ main(int argc, char **argv) +@@ -265,7 +281,7 @@ main(int argc, char **argv) * since the vector is processed in one sequential pass. * The vector could be optimized out of existence) */ @@ -181,7 +199,7 @@ readin(char *name, struct diff **dd) { int a, b, c, d, i; -@@ -307,17 +320,18 @@ readin(char *name, struct diff **dd) +@@ -307,17 +323,18 @@ readin(char *name, struct diff **dd) return (i); } @@ -202,7 +220,7 @@ getchange(FILE *b) { char *line; -@@ -329,7 +343,7 @@ getchange(FILE *b) +@@ -329,7 +346,7 @@ getchange(FILE *b) return (NULL); } @@ -211,7 +229,7 @@ getline(FILE *b, size_t *n) { char *cp; -@@ -357,7 +371,7 @@ getline(FILE *b, size_t *n) +@@ -357,7 +374,7 @@ getline(FILE *b, size_t *n) return (buf); } @@ -220,7 +238,7 @@ merge(int m1, int m2) { struct diff *d1, *d2, *d3; -@@ -367,8 +381,7 @@ merge(int m1, int m2) +@@ -367,8 +384,7 @@ merge(int m1, int m2) d2 = d23; j = 0; @@ -230,7 +248,7 @@ printf("Binary file detected; comparison failed\n"); exit(EXIT_FAILURE); } -@@ -464,31 +477,29 @@ merge(int m1, int m2) +@@ -464,31 +480,29 @@ merge(int m1, int m2) } static int @@ -239,12 +257,12 @@ { - wint_t ch = L'\0'; - size_t i; +- +- if (aflag || f == NULL) +- return (1); + int i, check_size; + char ch; -- if (aflag || f == NULL) -- return (1); -- - rewind(f); - errno = 0; - for (i = 0; i <= BUFSIZ; i++) { @@ -279,7 +297,7 @@ printf("====%s\n", s); } -@@ -497,9 +508,10 @@ separate(const char *s) +@@ -497,9 +511,10 @@ separate(const char *s) * It is to be printed only if it does not duplicate something to be * printed later. */ @@ -291,7 +309,7 @@ printf("%d:", i); last[i] = rold->to; prange(rold); -@@ -510,12 +522,14 @@ change(int i, struct range *rold, int du +@@ -510,12 +525,14 @@ change(int i, struct range *rold, int du (void)skip(i, rold->to, " "); } @@ -309,7 +327,7 @@ if (rold->to <= rold->from) printf("%da\n", rold->from - 1); else { -@@ -531,7 +545,7 @@ prange(struct range *rold) +@@ -531,7 +548,7 @@ prange(struct range *rold) * and an artificial dummy difference (trange) must be ginned up to * correspond to the change reported in the other file. */ @@ -318,7 +336,7 @@ keep(int i, struct range *rnew) { int delta; -@@ -547,7 +561,7 @@ keep(int i, struct range *rnew) +@@ -547,7 +564,7 @@ keep(int i, struct range *rnew) * skip to just before line number from in file "i". If "pr" is non-NULL, * print all skipped stuff with string pr as a prefix. */ @@ -327,7 +345,7 @@ skip(int i, int from, char *pr) { size_t j, n; -@@ -558,7 +572,6 @@ skip(int i, int from, char *pr) +@@ -558,7 +575,6 @@ skip(int i, int from, char *pr) trouble(); if (pr != NULL) printf("%s%s", Tflag == 1? "\t" : pr, line); @@ -335,7 +353,7 @@ cline[i]++; } return ((int) n); -@@ -568,10 +581,10 @@ skip(int i, int from, char *pr) +@@ -568,10 +584,10 @@ skip(int i, int from, char *pr) * Return 1 or 0 according as the old range (in file 1) contains exactly * the same data as the new range (in file 2). */ @@ -348,7 +366,7 @@ int nchar; int nline; -@@ -597,7 +610,7 @@ duplicate(struct range *r1, struct range +@@ -597,7 +613,7 @@ duplicate(struct range *r1, struct range return (1); } @@ -357,7 +375,7 @@ repos(int nchar) { int i; -@@ -606,18 +619,43 @@ repos(int nchar) +@@ -606,18 +622,43 @@ repos(int nchar) (void)fseek(fp[i], (long)-nchar, SEEK_CUR); } @@ -403,7 +421,7 @@ if (((dup + 1) & eflag) == 0) return (j); j++; -@@ -632,10 +670,10 @@ edit(struct diff *diff, int dup, int j) +@@ -632,10 +673,10 @@ edit(struct diff *diff, int dup, int j) } /* regurgitate */ @@ -416,7 +434,7 @@ char block[BUFSIZ]; for (n = n; n > 0; n--) { -@@ -657,14 +695,13 @@ edscript(int n) +@@ -657,14 +698,13 @@ edscript(int n) printf("%da\n%s\n.\n", de[n].old.from - 1, f1mark); } } @@ -433,7 +451,7 @@ increase(void) { struct diff *p; -@@ -698,13 +735,29 @@ increase(void) +@@ -698,13 +738,29 @@ increase(void) szchanges = newsz; }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120719173044.65A4D1065673>