]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/hameg-hmo/protocol.c
hameg-hmo: Use g_byte_array_free() instead of g_free().
[libsigrok.git] / src / hardware / hameg-hmo / protocol.c
index 02fb4d5c8846154e4742aa7c3474f7589b08bdd5..f534cb4705c07042dfbeb5da562870a950c5f990 100644 (file)
@@ -664,6 +664,7 @@ SR_PRIV int hmo_init_device(struct sr_dev_inst *sdi)
        unsigned int i, j, group;
        struct sr_channel *ch;
        struct dev_context *devc;
+       int ret;
 
        devc = sdi->priv;
        model_index = -1;
@@ -687,9 +688,13 @@ SR_PRIV int hmo_init_device(struct sr_dev_inst *sdi)
 
        devc->analog_groups = g_malloc0(sizeof(struct sr_channel_group*) *
                                        scope_models[model_index].analog_channels);
-
        devc->digital_groups = g_malloc0(sizeof(struct sr_channel_group*) *
                                         scope_models[model_index].digital_pods);
+       if (!devc->analog_groups || !devc->digital_groups) {
+               g_free(devc->analog_groups);
+               g_free(devc->digital_groups);
+               return SR_ERR_MALLOC;
+       }
 
        /* Add analog channels. */
        for (i = 0; i < scope_models[model_index].analog_channels; i++) {
@@ -707,12 +712,19 @@ SR_PRIV int hmo_init_device(struct sr_dev_inst *sdi)
        }
 
        /* Add digital channel groups. */
+       ret = SR_OK;
        for (i = 0; i < scope_models[model_index].digital_pods; i++) {
                devc->digital_groups[i] = g_malloc0(sizeof(struct sr_channel_group));
+               if (!devc->digital_groups[i]) {
+                       ret = SR_ERR_MALLOC;
+                       break;
+               }
                devc->digital_groups[i]->name = g_strdup_printf("POD%d", i);
                sdi->channel_groups = g_slist_append(sdi->channel_groups,
                                   devc->digital_groups[i]);
        }
+       if (ret != SR_OK)
+               return ret;
 
        /* Add digital channels. */
        for (i = 0; i < scope_models[model_index].digital_channels; i++) {
@@ -869,7 +881,6 @@ SR_PRIV int hmo_receive_data(int fd, int revents, void *cb_data)
                if (sr_scpi_get_block(sdi->conn, NULL, &data) != SR_OK) {
                        if (data)
                                g_byte_array_free(data, TRUE);
-
                        return TRUE;
                }
 
@@ -915,7 +926,8 @@ SR_PRIV int hmo_receive_data(int fd, int revents, void *cb_data)
                break;
        case SR_CHANNEL_LOGIC:
                if (sr_scpi_get_block(sdi->conn, NULL, &data) != SR_OK) {
-                       g_free(data);
+                       if (data)
+                               g_byte_array_free(data, TRUE);
                        return TRUE;
                }