summaryrefslogtreecommitdiffstats
path: root/gio/ginputstream.override
diff options
context:
space:
mode:
authorJohan Dahlin <johan@gnome.org>2008-07-28 22:06:26 +0000
committerJohan Dahlin <johan@src.gnome.org>2008-07-28 22:06:26 +0000
commit05461cad1d58f4c0de73a63a69f260a01286e08e (patch)
tree159dd7ab7b5f46d648e42a346eedbba471c247fd /gio/ginputstream.override
parent6151bbd9f69c6131be611267c887eb130607e569 (diff)
downloadpygobject-05461cad1d58f4c0de73a63a69f260a01286e08e.tar.gz
pygobject-05461cad1d58f4c0de73a63a69f260a01286e08e.tar.xz
pygobject-05461cad1d58f4c0de73a63a69f260a01286e08e.zip
Add a new example
2008-07-29 Johan Dahlin <johan@gnome.org> * examples/gio/downloader.py: Add a new example * gio/ginputstream.override: Use a string internally instead of a PyStringObject when in read_async. Create a new python string in finish and honor the number of bytes read. svn path=/trunk/; revision=892
Diffstat (limited to 'gio/ginputstream.override')
-rw-r--r--gio/ginputstream.override21
1 files changed, 12 insertions, 9 deletions
diff --git a/gio/ginputstream.override b/gio/ginputstream.override
index 878f7e7..267ae01 100644
--- a/gio/ginputstream.override
+++ b/gio/ginputstream.override
@@ -26,7 +26,7 @@ headers
typedef struct {
PyObject *callback;
PyObject *data;
- PyObject *buffer;
+ guchar *buffer;
} PyGIONotifyRead;
static void
@@ -44,7 +44,6 @@ async_result_callback_marshal_read(GObject *source_object,
if (notify->buffer) {
if (!quark)
quark = g_quark_from_string("pygio::buffer");
- Py_XINCREF(notify->buffer);
g_object_set_qdata_full(G_OBJECT(result), quark,
notify->buffer, py_decref_callback);
}
@@ -186,12 +185,12 @@ _wrap_g_input_stream_read_async(PyGObject *self,
if (!pygio_check_cancellable(pycancellable, &cancellable))
return NULL;
- notify->buffer = PyString_FromStringAndSize((char *)NULL, count);
+ notify->buffer = g_malloc(count);
if (notify->buffer == NULL)
return NULL;
g_input_stream_read_async(G_INPUT_STREAM(self->obj),
- PyString_AS_STRING((PyStringObject *)notify->buffer),
+ notify->buffer,
count,
io_priority,
cancellable,
@@ -212,7 +211,8 @@ _wrap_g_input_stream_read_finish(PyGObject *self,
PyGObject *result;
GError *error = NULL;
static GQuark quark = 0;
- PyObject *buffer;
+ gchar *buffer;
+ Py_ssize_t bytesread;
if (!quark)
quark = g_quark_from_string("pygio::buffer");
@@ -223,15 +223,18 @@ _wrap_g_input_stream_read_finish(PyGObject *self,
return NULL;
- g_input_stream_read_finish(G_INPUT_STREAM(self->obj),
- G_ASYNC_RESULT(result->obj), &error);
+ bytesread = g_input_stream_read_finish(G_INPUT_STREAM(self->obj),
+ G_ASYNC_RESULT(result->obj), &error);
if (pyg_error_check(&error))
return NULL;
+ if (bytesread == 0) {
+ return PyString_FromString("");
+ }
+
buffer = g_object_get_qdata(G_OBJECT(result->obj), quark);
- /* FIXME: Should we refcount the buffer here? */
- return buffer;
+ return PyString_FromStringAndSize(buffer, bytesread);
}
%%
override g_input_stream_close_async kwargs