From 834f4dd7c921593674409b9088458f378ac00ca4 Mon Sep 17 00:00:00 2001 From: Greg Stein Date: Mon, 14 May 2001 09:32:26 +0000 Subject: [PATCH] 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) --- Modules/mmapmodule.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index dd7ff6dcf66..acf85a40388 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -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++; }