X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=util.c;h=1e914e3e44a1ee0ae2b0d735cd87f29345f66551;hb=a83e259abd32c2c8a340af47d5e0d3633331a6cd;hp=430a7fb5e5c5bff8800ae7fd711425d276cc20bc;hpb=514b2edc54efda9c6698456748c4256bb901eddd;p=libsigrokdecode.git diff --git a/util.c b/util.c index 430a7fb..1e914e3 100644 --- a/util.c +++ b/util.c @@ -281,6 +281,8 @@ SRD_PRIV int py_pydictitem_as_str(PyObject *py_obj, PyObject *py_key, goto err; } + PyGILState_Release(gstate); + return py_str_as_str(py_value, outstr); err: @@ -301,7 +303,7 @@ err: * * @private */ -SRD_PRIV int py_pydictitem_as_long(PyObject *py_obj, PyObject *py_key, uint64_t *out) +SRD_PRIV int py_pydictitem_as_long(PyObject *py_obj, PyObject *py_key, int64_t *out) { PyObject *py_value; PyGILState_STATE gstate; @@ -326,7 +328,7 @@ SRD_PRIV int py_pydictitem_as_long(PyObject *py_obj, PyObject *py_key, uint64_t goto err; } - *out = PyLong_AsUnsignedLongLong(py_value); + *out = PyLong_AsLongLong(py_value); PyGILState_Release(gstate); @@ -383,7 +385,7 @@ SRD_PRIV int py_str_as_str(PyObject *py_str, char **outstr) /** * Convert a Python list of unicode strings to a C string vector. - * On success, a pointer to a newly allocated NULL-terminated array of + * On success, a pointer to a newly allocated NUL-terminated array of * allocated C strings is written to @a out_strv. The caller must g_free() * each string and the array itself. * @@ -445,6 +447,8 @@ SRD_PRIV int py_strseq_to_char(PyObject *py_strseq, char ***out_strv) } *out_strv = strv; + PyGILState_Release(gstate); + return SRD_OK; err_out: @@ -486,7 +490,6 @@ SRD_PRIV GVariant *py_obj_to_variant(PyObject *py_obj) } if (!var) srd_exception_catch("Failed to extract string value"); - } else if (PyLong_Check(py_obj)) { /* integer */ int64_t val; @@ -495,7 +498,6 @@ SRD_PRIV GVariant *py_obj_to_variant(PyObject *py_obj) var = g_variant_new_int64(val); else srd_exception_catch("Failed to extract integer value"); - } else if (PyFloat_Check(py_obj)) { /* float */ double val; @@ -504,7 +506,6 @@ SRD_PRIV GVariant *py_obj_to_variant(PyObject *py_obj) var = g_variant_new_double(val); else srd_exception_catch("Failed to extract float value"); - } else { srd_err("Failed to extract value of unsupported type."); }