diff options
Diffstat (limited to 'Objects/stringlib/find.h')
-rw-r--r-- | Objects/stringlib/find.h | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/Objects/stringlib/find.h b/Objects/stringlib/find.h index c2399ad176..d5394b4a31 100644 --- a/Objects/stringlib/find.h +++ b/Objects/stringlib/find.h @@ -9,29 +9,38 @@ Py_LOCAL(Py_ssize_t) stringlib_find(const STRINGLIB_CHAR* str, Py_ssize_t str_len, - const STRINGLIB_CHAR* sub, Py_ssize_t sub_len) + const STRINGLIB_CHAR* sub, Py_ssize_t sub_len, + Py_ssize_t offset) { + Py_ssize_t pos; + if (sub_len == 0) - return 0; + return offset; + + pos = fastsearch(str, str_len, sub, sub_len, FAST_SEARCH); - return fastsearch(str, str_len, sub, sub_len, FAST_SEARCH); + if (pos >= 0) + pos += offset; + + return pos; } Py_LOCAL(Py_ssize_t) stringlib_rfind(const STRINGLIB_CHAR* str, Py_ssize_t str_len, - const STRINGLIB_CHAR* sub, Py_ssize_t sub_len) + const STRINGLIB_CHAR* sub, Py_ssize_t sub_len, + Py_ssize_t offset) { Py_ssize_t pos; /* XXX - create reversefastsearch helper! */ if (sub_len == 0) - pos = str_len; + pos = str_len + offset; else { Py_ssize_t j; pos = -1; for (j = str_len - sub_len; j >= 0; --j) if (STRINGLIB_CMP(str+j, sub, sub_len) == 0) { - pos = j; + pos = j + offset; break; } } |