Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 2 Feb 2009 17:46:30 GMT
From:      Gabor Kovesdan <gabor@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 157044 for review
Message-ID:  <200902021746.n12HkUpD042587@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=157044

Change 157044 by gabor@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);
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200902021746.n12HkUpD042587>