summaryrefslogtreecommitdiffstats
path: root/gio
diff options
context:
space:
mode:
authorJohan Dahlin <johan@gnome.org>2008-01-20 10:21:31 +0000
committerJohan Dahlin <johan@src.gnome.org>2008-01-20 10:21:31 +0000
commit5df2f97e4db1dfefc1ff933758e9b580d796c53c (patch)
tree9f86123668a30590ff78b76afc5772f71fa8ada9 /gio
parent7df645aa2537b31b7801206d4ea4125799ddd99c (diff)
downloadpygobject-5df2f97e4db1dfefc1ff933758e9b580d796c53c.tar.gz
pygobject-5df2f97e4db1dfefc1ff933758e9b580d796c53c.tar.xz
pygobject-5df2f97e4db1dfefc1ff933758e9b580d796c53c.zip
Add a new method, to fetch the buffer (_wrap_g_input_stream_read_async):
2008-01-20 Johan Dahlin <johan@gnome.org> * gio/gio.override (_wrap_g_simple_async_result_get_buffer): Add a new method, to fetch the buffer (_wrap_g_input_stream_read_async): Save a reference to the buffer. * tests/test_gio.py (TestInputStream.testReadAsync.callback): Check the content svn path=/trunk/; revision=740
Diffstat (limited to 'gio')
-rw-r--r--gio/gio.override45
1 files changed, 37 insertions, 8 deletions
diff --git a/gio/gio.override b/gio/gio.override
index e2b8e50..904791b 100644
--- a/gio/gio.override
+++ b/gio/gio.override
@@ -8,20 +8,34 @@ headers
#define BUFSIZE 8192
typedef struct {
- PyObject *callback;
- PyObject *data;
+ PyObject *callback;
+ PyObject *data;
+ PyObject *buffer;
} PyGAsyncRequestNotify;
static void
+py_decref_callback (gpointer data)
+{
+ Py_DECREF((PyObject*)data);
+}
+
+static void
async_result_callback_marshal(GObject *source_object,
GAsyncResult *result,
PyGAsyncRequestNotify *notify)
{
PyObject *ret;
PyGILState_STATE state;
-
+ static GQuark quark = 0;
+
state = pyg_gil_state_ensure();
+ if (!quark)
+ quark = g_quark_from_string("pygio::buffer");
+ Py_INCREF(notify->buffer);
+ g_object_set_qdata_full(G_OBJECT(result), quark,
+ notify->buffer, py_decref_callback);
+
if (notify->data)
ret = PyEval_CallFunction(notify->callback, "(OOO)",
pygobject_new(source_object),
@@ -266,7 +280,6 @@ _wrap_g_input_stream_read_async(PyGObject *self, PyObject *args, PyObject *kwarg
long count = -1;
int io_priority = G_PRIORITY_DEFAULT;
PyGObject *pycancellable;
- PyObject *buffer;
GCancellable *cancellable;
PyGAsyncRequestNotify *notify;
@@ -303,12 +316,12 @@ _wrap_g_input_stream_read_async(PyGObject *self, PyObject *args, PyObject *kwarg
Py_INCREF(notify->callback);
Py_XINCREF(notify->data);
- buffer = PyString_FromStringAndSize((char *)NULL, count);
- if (buffer == NULL)
+ notify->buffer = PyString_FromStringAndSize((char *)NULL, count);
+ if (notify->buffer == NULL)
return NULL;
-
+
g_input_stream_read_async(G_INPUT_STREAM(self->obj),
- PyString_AS_STRING((PyStringObject *)buffer),
+ PyString_AS_STRING((PyStringObject *)notify->buffer),
count,
io_priority,
cancellable,
@@ -357,3 +370,19 @@ _wrap_g_output_stream_write(PyGObject *self, PyObject *args, PyObject *kwargs)
return PyInt_FromLong(written);
}
+%%
+define GSimpleAsyncResult.get_buffer noargs
+static PyObject *
+_wrap_g_simple_async_result_get_buffer(PyGObject *self)
+{
+ static GQuark quark = 0;
+ PyObject *buffer;
+
+ if (!quark)
+ quark = g_quark_from_string("pygio::buffer");
+
+ buffer = g_object_get_qdata(G_OBJECT(self->obj), quark);
+
+ Py_INCREF(buffer);
+ return buffer;
+}