mmap_read_byte_method(mmap_object *self,
PyObject *args)
{
- char value;
- char *where;
CHECK_VALID(NULL);
if (!PyArg_ParseTuple(args, ":read_byte"))
return NULL;
if (self->pos < self->size) {
- where = self->data + self->pos;
- value = (char) *(where);
+ char value = self->data[self->pos];
self->pos += 1;
- return Py_BuildValue("c", (char) *(where));
+ return Py_BuildValue("c", value);
} else {
PyErr_SetString (PyExc_ValueError, "read byte out of range");
return NULL;
mmap_find_method(mmap_object *self,
PyObject *args)
{
- int start = self->pos;
+ long start = self->pos;
char *needle;
int len;
CHECK_VALID(NULL);
- if (!PyArg_ParseTuple (args, "s#|i:find", &needle, &len, &start)) {
+ if (!PyArg_ParseTuple (args, "s#|l: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 ((size_t)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)));
+ "l",
+ (long) (p - self->data));
}
p++;
}
m_obj->data = mmap(NULL, map_size,
prot, flags,
fd, 0);
- if (m_obj->data == (void *)-1)
+ if (m_obj->data == (char *)-1)
{
Py_DECREF(m_obj);
PyErr_SetFromErrno(mmap_module_error);