diff options
author | Johan Dahlin <johan@gnome.org> | 2008-07-28 22:06:26 +0000 |
---|---|---|
committer | Johan Dahlin <johan@src.gnome.org> | 2008-07-28 22:06:26 +0000 |
commit | 05461cad1d58f4c0de73a63a69f260a01286e08e (patch) | |
tree | 159dd7ab7b5f46d648e42a346eedbba471c247fd /gio/ginputstream.override | |
parent | 6151bbd9f69c6131be611267c887eb130607e569 (diff) | |
download | pygobject-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.override | 21 |
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 |