Skip to content

Commit de4baba

Browse files
committed
Convert mmap.flush to use argument clinic
1 parent 282e885 commit de4baba

File tree

1 file changed

+27
-7
lines changed

1 file changed

+27
-7
lines changed

Modules/mmapmodule.c

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@
2828
#include "pycore_fileutils.h" // _Py_stat_struct
2929
#include "pycore_weakref.h" // FT_CLEAR_WEAKREFS()
3030

31+
/*[clinic input]
32+
module mmap
33+
class mmap.mmap "mmap_object *" "mmap_object_type"
34+
[clinic start generated code]*/
35+
/*[clinic end generated code: output=da39a3ee5e6b4b0d input=4ebde54549b9daa7]*/
36+
3137
#include <stddef.h> // offsetof()
3238
#ifndef MS_WINDOWS
3339
# include <unistd.h> // close()
@@ -127,6 +133,9 @@ typedef struct {
127133
} mmap_object;
128134

129135
#define mmap_object_CAST(op) ((mmap_object *)(op))
136+
#define MMAP_GET_SIZE(self) (mmap_object_CAST(self)->size)
137+
138+
#include "clinic/mmapmodule.c.h"
130139

131140
static int
132141
mmap_object_traverse(PyObject *op, visitproc visit, void *arg)
@@ -924,15 +933,26 @@ mmap_tell_method(PyObject *op, PyObject *Py_UNUSED(ignored))
924933
return PyLong_FromSize_t(self->pos);
925934
}
926935

936+
/*[clinic input]
937+
mmap.mmap.flush
938+
939+
offset: Py_ssize_t = 0
940+
size: Py_ssize_t(c_default="MMAP_GET_SIZE(self)") = None
941+
/
942+
943+
Flushes changes made to the in-memory copy of a file back to disk.
944+
945+
If offset and size are specified, only the specified range will
946+
be flushed. If not specified, the entire mapped region will be
947+
flushed.
948+
[clinic start generated code]*/
949+
927950
static PyObject *
928-
mmap_flush_method(PyObject *op, PyObject *args)
951+
mmap_mmap_flush_impl(mmap_object *self, Py_ssize_t offset, Py_ssize_t size)
952+
/*[clinic end generated code: output=956ced67466149cf input=23ac67c08804a13a]*/
929953
{
930-
Py_ssize_t offset = 0;
931-
mmap_object *self = mmap_object_CAST(op);
932-
Py_ssize_t size = self->size;
933954
CHECK_VALID(NULL);
934-
if (!PyArg_ParseTuple(args, "|nn:flush", &offset, &size))
935-
return NULL;
955+
936956
if (size < 0 || offset < 0 || self->size - offset < size) {
937957
PyErr_SetString(PyExc_ValueError, "flush values out of range");
938958
return NULL;
@@ -1194,7 +1214,7 @@ static struct PyMethodDef mmap_object_methods[] = {
11941214
{"close", mmap_close_method, METH_NOARGS},
11951215
{"find", mmap_find_method, METH_VARARGS},
11961216
{"rfind", mmap_rfind_method, METH_VARARGS},
1197-
{"flush", mmap_flush_method, METH_VARARGS},
1217+
MMAP_MMAP_FLUSH_METHODDEF
11981218
#ifdef HAVE_MADVISE
11991219
{"madvise", mmap_madvise_method, METH_VARARGS},
12001220
#endif

0 commit comments

Comments
 (0)