From 9c012af3c368e0017b3671d241f6c3e370328232 Mon Sep 17 00:00:00 2001 From: Tim Peters Date: Thu, 10 May 2001 00:32:57 +0000 Subject: 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. --- Modules/stropmodule.c | 14 ++++++-------- Objects/stringobject.c | 14 ++++++-------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/Modules/stropmodule.c b/Modules/stropmodule.c index 253c4ec..c245794 100644 --- a/Modules/stropmodule.c +++ b/Modules/stropmodule.c @@ -1058,8 +1058,10 @@ mymemreplace(const char *str, int len, /* input string */ /* 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; @@ -1067,7 +1069,7 @@ mymemreplace(const char *str, int len, /* input string */ 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'; } @@ -1078,7 +1080,7 @@ mymemreplace(const char *str, int len, /* input string */ 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) @@ -1093,10 +1095,6 @@ mymemreplace(const char *str, int len, /* input string */ 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) diff --git a/Objects/stringobject.c b/Objects/stringobject.c index ec909db..7600c03 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -1557,8 +1557,10 @@ mymemreplace(const char *str, int len, /* input string */ /* 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 @@ mymemreplace(const char *str, int len, /* input string */ 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 @@ mymemreplace(const char *str, int len, /* input string */ 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 @@ mymemreplace(const char *str, int len, /* input string */ 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) -- cgit v0.12