]> sigrok.org Git - libsigrokdecode.git/blobdiff - type_decoder.c
cfp: Drop unneeded annotation prefix; plural fixes.
[libsigrokdecode.git] / type_decoder.c
index 59fb0498b08d616275b5f3cc5cd03e14e1d45e83..6692c3d44e34c54960381aa56812748726e81406 100644 (file)
@@ -50,7 +50,6 @@ static void release_annotation(struct srd_proto_data_annotation *pda)
                return;
        if (pda->ann_text)
                g_strfreev(pda->ann_text);
-       g_free(pda);
 }
 
 static int convert_annotation(struct srd_decoder_inst *di, PyObject *obj,
@@ -110,10 +109,9 @@ static int convert_annotation(struct srd_decoder_inst *di, PyObject *obj,
                goto err;
        }
 
-       pda = g_malloc(sizeof(struct srd_proto_data_annotation));
+       pda = pdata->data;
        pda->ann_class = ann_class;
        pda->ann_text = ann_text;
-       pdata->data = pda;
 
        PyGILState_Release(gstate);
 
@@ -130,7 +128,6 @@ static void release_binary(struct srd_proto_data_binary *pdb)
        if (!pdb)
                return;
        g_free((void *)pdb->data);
-       g_free(pdb);
 }
 
 static int convert_binary(struct srd_decoder_inst *di, PyObject *obj,
@@ -194,15 +191,12 @@ static int convert_binary(struct srd_decoder_inst *di, PyObject *obj,
 
        PyGILState_Release(gstate);
 
-       pdb = g_malloc(sizeof(struct srd_proto_data_binary));
+       pdb = pdata->data;
        pdb->bin_class = bin_class;
        pdb->size = size;
-       if (!(pdb->data = g_try_malloc(pdb->size))) {
-               g_free(pdb);
+       if (!(pdb->data = g_try_malloc(pdb->size)))
                return SRD_ERR_MALLOC;
-       }
        memcpy((void *)pdb->data, (const void *)buf, pdb->size);
-       pdata->data = pdb;
 
        return SRD_OK;
 
@@ -325,6 +319,8 @@ static PyObject *Decoder_put(PyObject *self, PyObject *args)
        struct srd_decoder_inst *di, *next_di;
        struct srd_pd_output *pdo;
        struct srd_proto_data pdata;
+       struct srd_proto_data_annotation pda;
+       struct srd_proto_data_binary pdb;
        uint64_t start_sample, end_sample;
        int output_id;
        struct srd_pd_callback *cb;
@@ -370,6 +366,7 @@ static PyObject *Decoder_put(PyObject *self, PyObject *args)
        case SRD_OUTPUT_ANN:
                /* Annotations are only fed to callbacks. */
                if ((cb = srd_pd_output_callback_find(di->sess, pdo->output_type))) {
+                       pdata.data = &pda;
                        /* Convert from PyDict to srd_proto_data_annotation. */
                        if (convert_annotation(di, py_data, &pdata) != SRD_OK) {
                                /* An error was already logged. */
@@ -405,6 +402,7 @@ static PyObject *Decoder_put(PyObject *self, PyObject *args)
                break;
        case SRD_OUTPUT_BINARY:
                if ((cb = srd_pd_output_callback_find(di->sess, pdo->output_type))) {
+                       pdata.data = &pdb;
                        /* Convert from PyDict to srd_proto_data_binary. */
                        if (convert_binary(di, py_data, &pdata) != SRD_OK) {
                                /* An error was already logged. */