diff Objects/stringobject.c @ 17751:c886cd1c2184 legacy-trunk

Heh. I need a break. After this: stropmodule & stringobject were more out of synch than I realized, and I managed to break replace's "count" argument when it was 0. All is well again. Maybe. Bugfix candidate.
author Tim Peters <tim.peters@gmail.com>
date Thu, 10 May 2001 00:32:57 +0000
parents b39266f7484c
children 9ea87c0a7c04
line wrap: on
line diff
--- a/Objects/stringobject.c	Thu May 10 00:05:33 2001 +0000
+++ b/Objects/stringobject.c	Thu May 10 00:32:57 2001 +0000
@@ -1557,8 +1557,10 @@
 
 	/* find length of output string */
 	nfound = mymemcnt(str, len, pat, pat_len);
-	if (count > 0)
-		nfound = nfound > count ? count : nfound;
+	if (count < 0)
+		count = INT_MAX;
+	else if (nfound > count)
+		nfound = count;
 	if (nfound == 0)
 		goto return_same;
 
@@ -1566,7 +1568,7 @@
 	if (new_len == 0) {
 		/* Have to allocate something for the caller to free(). */
 		out_s = (char *)PyMem_MALLOC(1);
-		if (out_s = NULL)
+		if (out_s == NULL)
 			return NULL;
 		out_s[0] = '\0';
 	}
@@ -1577,7 +1579,7 @@
 			return NULL;
 		out_s = new_s;
 
-		while (len > 0) {
+		for (; count > 0 && len > 0; --count) {
 			/* find index of next instance of pattern */
 			offset = mymemfind(str, len, pat, pat_len);
 			if (offset == -1)
@@ -1592,10 +1594,6 @@
 			new_s += offset;
 			memcpy(new_s, sub, sub_len);
 			new_s += sub_len;
-
-			/* note count==0 is effectively infinity */
-			if (--count == 0)
-				break;
 		}
 		/* copy any remaining values into output string */
 		if (len > 0)