#include <string.h>
#include <time.h>
+#include <pyglib.h>
#include <pygobject.h>
#include <pyglib-python-compat.h>
PyGISequenceCache *seq_cache = (PyGISequenceCache *)arg_cache;
gsize processed_items = 0;
- array_ = arg->v_pointer;
-
/* GArrays make it easier to iterate over arrays
* with different element sizes but requires that
* we allocate a GArray if the argument was a C array
g_assert(arg->v_pointer != NULL);
len = seq_cache->fixed_size;
} else if (seq_cache->is_zero_terminated) {
- g_assert(arg->v_pointer != NULL);
- if(seq_cache->item_cache->type_tag == GI_TYPE_TAG_UINT8) {
+ if (arg->v_pointer == NULL) {
+ len = 0;
+ } else if (seq_cache->item_cache->type_tag == GI_TYPE_TAG_UINT8) {
len = strlen (arg->v_pointer);
} else {
len = g_strv_length ((gchar **)arg->v_pointer);
g_free (array_->data);
array_->data = arg->v_pointer;
array_->len = len;
+ } else {
+ array_ = arg->v_pointer;
}
if (seq_cache->item_cache->type_tag == GI_TYPE_TAG_UINT8) {
PyGIArgCache *arg_cache,
GIArgument *arg)
{
+ GError *error = arg->v_pointer;
PyObject *py_obj = NULL;
- PyErr_Format (PyExc_NotImplementedError,
- "Marshalling for gerror to PyObject is not implemented");
- return py_obj;
+ py_obj = pyglib_error_marshal(&error);
+
+ if (arg_cache->transfer == GI_TRANSFER_EVERYTHING && error != NULL) {
+ g_error_free (error);
+ }
+
+ if (py_obj != NULL) {
+ return py_obj;
+ } else {
+ Py_RETURN_NONE;
+ }
}
PyObject *