|
28 | 28 | #include "pycore_fileutils.h" // _Py_stat_struct |
29 | 29 | #include "pycore_weakref.h" // FT_CLEAR_WEAKREFS() |
30 | 30 |
|
| 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 | + |
31 | 37 | #include <stddef.h> // offsetof() |
32 | 38 | #ifndef MS_WINDOWS |
33 | 39 | # include <unistd.h> // close() |
@@ -127,6 +133,9 @@ typedef struct { |
127 | 133 | } mmap_object; |
128 | 134 |
|
129 | 135 | #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" |
130 | 139 |
|
131 | 140 | static int |
132 | 141 | mmap_object_traverse(PyObject *op, visitproc visit, void *arg) |
@@ -924,15 +933,26 @@ mmap_tell_method(PyObject *op, PyObject *Py_UNUSED(ignored)) |
924 | 933 | return PyLong_FromSize_t(self->pos); |
925 | 934 | } |
926 | 935 |
|
| 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 | + |
927 | 950 | 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]*/ |
929 | 953 | { |
930 | | - Py_ssize_t offset = 0; |
931 | | - mmap_object *self = mmap_object_CAST(op); |
932 | | - Py_ssize_t size = self->size; |
933 | 954 | CHECK_VALID(NULL); |
934 | | - if (!PyArg_ParseTuple(args, "|nn:flush", &offset, &size)) |
935 | | - return NULL; |
| 955 | + |
936 | 956 | if (size < 0 || offset < 0 || self->size - offset < size) { |
937 | 957 | PyErr_SetString(PyExc_ValueError, "flush values out of range"); |
938 | 958 | return NULL; |
@@ -1194,7 +1214,7 @@ static struct PyMethodDef mmap_object_methods[] = { |
1194 | 1214 | {"close", mmap_close_method, METH_NOARGS}, |
1195 | 1215 | {"find", mmap_find_method, METH_VARARGS}, |
1196 | 1216 | {"rfind", mmap_rfind_method, METH_VARARGS}, |
1197 | | - {"flush", mmap_flush_method, METH_VARARGS}, |
| 1217 | + MMAP_MMAP_FLUSH_METHODDEF |
1198 | 1218 | #ifdef HAVE_MADVISE |
1199 | 1219 | {"madvise", mmap_madvise_method, METH_VARARGS}, |
1200 | 1220 | #endif |
|
0 commit comments