PERFORCE change 157044 for review
Gabor Kovesdan
gabor at FreeBSD.org
Mon Feb 2 09:46:32 PST 2009
http://perforce.freebsd.org/chv.cgi?CH=157044
Change 157044 by gabor at gabor_server on 2009/02/02 17:46:28
- Refactor check()
- Some features are temporarily broken
Affected files ...
.. //depot/projects/soc2008/gabor_textproc/diff/diffreg.c#10 edit
Differences ...
==== //depot/projects/soc2008/gabor_textproc/diff/diffreg.c#10 (text+ko) ====
@@ -750,6 +750,9 @@
{
int i, j, jackpot, c, d;
long ctold, ctnew;
+ char *strc, *strd;
+ size_t lenc, lend;
+ int a, b;
rewind(f1);
rewind(f2);
@@ -766,86 +769,70 @@
ixnew[j] = ctnew += skipline(f2);
j++;
}
- if (bflag || Bflag || wflag || iflag || strip_cr) {
- for (;;) {
- c = getc(f1);
- d = getc(f2);
- /*
- * GNU diff ignores a missing newline
- * in one file if bflag || wflag.
- */
- if ((bflag || wflag) &&
- ((c == EOF && d == '\n') ||
- (c == '\n' && d == EOF))) {
- break;
+
+ strc = fgetln(f1, &lenc);
+ strd = fgetln(f2, &lend);
+
+/* if (!bflag && !Bflag && !wflag && !iflag &&
+ !strip_cr && (strcmp(strc, strd) != 0)) {
+ J[i] = 0;
+ ctold += lenc;
+ ctnew += lend;
+ ixold[i] = ctold;
+ ixnew[j] = ctnew;
+ j++;
+ break;
+ }
+*/
+
+ for (a = b = 0; (a < lenc) && (b < lend); a++, b++) {
+ c = strc[a];
+ d = strd[b];
+ /*
+ * GNU diff ignores a missing newline
+ * in one file if bflag || wflag.
+ */
+ if ((bflag || wflag) &&
+ ((c == EOF && d == '\n') ||
+ (c == '\n' && d == EOF))) {
+ break;
+ }
+
+ ctold++;
+ ctnew++;
+ while ((strip_cr) && (c == '\r') && (d == '\n'))
+ c = strc[++a];
+ while ((strip_cr) && (d == '\r') && (c == '\n'))
+ d = strd[++b];
+ if (wflag) {
+ while (isspace(c) && c != '\n') {
+ c = strc[++a];
+ ctold++;
}
- // XXX: Bflag
- while (Bflag && isspace(c))
- c = skipline(f1);
- while (Bflag && isspace(d))
- d = skipline(f2);
- ctold++;
- ctnew++;
- while ((strip_cr) && (c == '\r') && (d == '\n'))
- c = getc(f1);
- while ((strip_cr) && (d == '\r') && (c == '\n'))
- d = getc(f2);
- if (bflag && isspace(c) && isspace(d)) {
- do {
- if (c == '\n')
- break;
- ctold++;
- } while (isspace(c = getc(f1)));
- do {
- if (d == '\n')
- break;
- ctnew++;
- } while (isspace(d = getc(f2)));
- } else if (wflag) {
- while (isspace(c) && c != '\n') {
- c = getc(f1);
- ctold++;
- }
- while (isspace(d) && d != '\n') {
- d = getc(f2);
- ctnew++;
- }
- }
- if (chrtran[c] != chrtran[d]) {
- jackpot++;
- J[i] = 0;
- if (c != '\n' && c != EOF)
- ctold += skipline(f1);
- if (d != '\n' && c != EOF)
- ctnew += skipline(f2);
- break;
+ while (isspace(d) && d != '\n') {
+ d = strd[++b];
+ ctnew++;
}
- if (c == '\n' || c == EOF)
- break;
}
- } else {
- for (;;) {
- ctold++;
- ctnew++;
- if ((c = getc(f1)) != (d = getc(f2))) {
- /* jackpot++; */
- J[i] = 0;
- if (c != '\n' && c != EOF)
- ctold += skipline(f1);
- if (d != '\n' && c != EOF)
- ctnew += skipline(f2);
- break;
- }
- if (c == '\n' || c == EOF)
- break;
+
+ if (chrtran[c] != chrtran[d]) {
+// jackpot++;
+ J[i] = 0;
+ if (c != '\n' && c != EOF)
+ ctold += lenc - a + 1;
+ if (d != '\n' && c != EOF)
+ ctnew += lend - b + 1;
+ break;
}
+ if (c == '\n' || c == EOF)
+ break;
}
ixold[i] = ctold;
ixnew[j] = ctnew;
j++;
}
for (; j <= len[1]; j++)
- ixnew[j] = ctnew += skipline(f2);
+ ixnew[j] = ctnew += lend - b + 1;
/*
* if (jackpot)
* fprintf(stderr, "jackpot\n");
@@ -1291,7 +1278,6 @@
* There is a remote possibility that we end up with a zero sum.
* Zero is used as an EOF marker, so return 1 instead.
*/
- printf("HASH: %d\n", (sum == 0 ? 1 : sum));
return (sum == 0 ? 1 : sum);
}
More information about the p4-projects
mailing list