1) it didn't obey the "start" parameter (and when it does, we must validate
the value)
2) the return value needs to be an absolute index, rather than relative to
some arbitrary point in the file
(checking CVS, it appears this method never worked; these changes bring it
into line with typical .find() behavior)
if (!PyArg_ParseTuple (args, "s#|i:find", &needle, &len, &start)) {
return NULL;
} else {
- char *p = self->data+self->pos;
- char *e = self->data+self->size;
+ char *p;
+ char *e = self->data + self->size;
+
+ if (start < 0)
+ start += self->size;
+ if (start < 0)
+ start = 0;
+ else if (start > self->size)
+ start = self->size;
+ p = self->data + start;
+
while (p < e) {
char *s = p;
char *n = needle;
if (!*n) {
return Py_BuildValue (
"i",
- (int) (p - (self->data + start)));
+ (int) (p - self->data));
}
p++;
}