Fix the .find() method for memory maps.

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)
This commit is contained in:
Greg Stein 2001-05-14 09:32:26 +00:00
parent a814db579d
commit 834f4dd7c9
1 changed files with 12 additions and 3 deletions

View File

@ -232,8 +232,17 @@ mmap_find_method(mmap_object *self,
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;
@ -243,7 +252,7 @@ mmap_find_method(mmap_object *self,
if (!*n) {
return Py_BuildValue (
"i",
(int) (p - (self->data + start)));
(int) (p - self->data));
}
p++;
}