X-Git-Url: https://sigrok.org/gitweb/?p=libsigrokdecode.git;a=blobdiff_plain;f=type_decoder.c;h=e69b3c4e0b11e32f870bf35861a2a0368e09c430;hp=aa92c3b22490d9e68813661bbd80c7e7575e89e2;hb=4e7ccaf9f133106786fd85a432ae23e11d9dcea2;hpb=287e2788a726732e5f29eb3f5f4fe9d68fac4d05 diff --git a/type_decoder.c b/type_decoder.c index aa92c3b..e69b3c4 100644 --- a/type_decoder.c +++ b/type_decoder.c @@ -125,8 +125,7 @@ static void release_binary(struct srd_proto_data_binary *pdb) { if (!pdb) return; - if (pdb->data) - g_free((void *)pdb->data); + g_free((void *)pdb->data); g_free(pdb); } @@ -186,16 +185,18 @@ static int convert_binary(struct srd_decoder_inst *di, PyObject *obj, goto err; } - pdb = g_malloc(sizeof(struct srd_proto_data_binary)); if (PyBytes_AsStringAndSize(py_tmp, &buf, &size) == -1) goto err; PyGILState_Release(gstate); + pdb = g_malloc(sizeof(struct srd_proto_data_binary)); pdb->bin_class = bin_class; pdb->size = size; - if (!(pdb->data = g_try_malloc(pdb->size))) + if (!(pdb->data = g_try_malloc(pdb->size))) { + g_free(pdb); return SRD_ERR_MALLOC; + } memcpy((void *)pdb->data, (const void *)buf, pdb->size); pdata->data = pdb; @@ -369,17 +370,11 @@ static PyObject *Decoder_put(PyObject *self, PyObject *args) break; } - if (py_data) - Py_DECREF(py_data); - PyGILState_Release(gstate); Py_RETURN_NONE; err: - if (py_data) - Py_DECREF(py_data); - PyGILState_Release(gstate); return NULL; @@ -501,6 +496,8 @@ static int get_term_type(const char *v) return SRD_TERM_EITHER_EDGE; case 'n': return SRD_TERM_NO_EDGE; + default: + return -1; } return -1; @@ -524,14 +521,13 @@ static PyObject *get_current_pinvalues(const struct srd_decoder_inst *di) PyObject *py_pinvalues; PyGILState_STATE gstate; - gstate = PyGILState_Ensure(); - if (!di) { srd_err("Invalid decoder instance."); - PyGILState_Release(gstate); return NULL; } + gstate = PyGILState_Ensure(); + py_pinvalues = PyTuple_New(di->dec_num_channels); for (i = 0; i < di->dec_num_channels; i++) { @@ -592,7 +588,7 @@ static int create_term_list(PyObject *py_dict, GSList **term_list) srd_err("Failed to get the value."); goto err; } - term = g_malloc0(sizeof(struct srd_term)); + term = g_malloc(sizeof(struct srd_term)); term->type = get_term_type(term_str); term->channel = PyLong_AsLong(py_key); g_free(term_str); @@ -603,7 +599,7 @@ static int create_term_list(PyObject *py_dict, GSList **term_list) srd_err("Failed to get number of samples to skip."); goto err; } - term = g_malloc0(sizeof(struct srd_term)); + term = g_malloc(sizeof(struct srd_term)); term->type = SRD_TERM_SKIP; term->num_samples_to_skip = num_samples_to_skip; term->num_samples_already_skipped = 0; @@ -766,7 +762,7 @@ static int set_skip_condition(struct srd_decoder_inst *di, uint64_t count) GSList *term_list; condition_list_free(di); - term = g_malloc0(sizeof(*term)); + term = g_malloc(sizeof(*term)); term->type = SRD_TERM_SKIP; term->num_samples_to_skip = count; term->num_samples_already_skipped = 0; @@ -841,7 +837,9 @@ static PyObject *Decoder_wait(PyObject *self, PyObject *args) * while the termination request still gets signalled. */ found_match = FALSE; - ret = process_samples_until_condition_match(di, &found_match); + + /* Ignore return value for now, should never be negative. */ + (void)process_samples_until_condition_match(di, &found_match); Py_END_ALLOW_THREADS