diff options
Diffstat (limited to 'gio')
| -rw-r--r-- | gio/gfile.override | 5 | ||||
| -rw-r--r-- | gio/gio.override | 14 | ||||
| -rw-r--r-- | gio/goutputstream.override | 5 |
3 files changed, 20 insertions, 4 deletions
diff --git a/gio/gfile.override b/gio/gfile.override index 77dad6f..deb43e8 100644 --- a/gio/gfile.override +++ b/gio/gfile.override @@ -1110,9 +1110,10 @@ _wrap_g_file_replace_contents_async(PyGObject *self, PyObject *args, PyObject *k Py_INCREF(notify->callback); Py_XINCREF(notify->data); + pygio_notify_copy_buffer(notify, contents, length); g_file_replace_contents_async(G_FILE(self->obj), - contents, - length, + notify->buffer, + notify->buffer_size, etag, make_backup, flags, diff --git a/gio/gio.override b/gio/gio.override index e6916a0..0f6ae5f 100644 --- a/gio/gio.override +++ b/gio/gio.override @@ -36,6 +36,8 @@ headers typedef struct { PyObject *callback; PyObject *data; + gpointer buffer; + gsize buffer_size; } PyGIONotify; static void @@ -45,10 +47,22 @@ py_decref_callback (gpointer data) } static void +pygio_notify_copy_buffer(PyGIONotify *notify, gpointer buffer, gsize buffer_size) +{ + if (buffer_size > 0) { + notify->buffer = g_slice_copy(buffer_size, buffer); + notify->buffer_size = buffer_size; + } +} + +static void pygio_free_notify(PyGIONotify *notify) { Py_XDECREF(notify->callback); Py_XDECREF(notify->data); + if (notify->buffer) + g_slice_free1(notify->buffer_size, notify->buffer); + g_slice_free(PyGIONotify, notify); } diff --git a/gio/goutputstream.override b/gio/goutputstream.override index 3b44632..df9ea94 100644 --- a/gio/goutputstream.override +++ b/gio/goutputstream.override @@ -130,9 +130,10 @@ _wrap_g_output_stream_write_async(PyGObject *self, if (!pygio_check_cancellable(pycancellable, &cancellable)) return NULL; + pygio_notify_copy_buffer(notify, buffer, count); g_output_stream_write_async(G_OUTPUT_STREAM(self->obj), - buffer, - count, + notify->buffer, + notify->buffer_size, io_priority, cancellable, (GAsyncReadyCallback)async_result_callback_marshal, |
