X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fhameg-hmo%2Fprotocol.c;h=f534cb4705c07042dfbeb5da562870a950c5f990;hb=14cb6aa40a26e12f24a28c66e6a8d6ba636c6281;hp=e79901caaf37ee447f53119ae87d759005b14543;hpb=b0e80e9aa9a7398fa01a7949deb17640ca3c7d47;p=libsigrok.git diff --git a/src/hardware/hameg-hmo/protocol.c b/src/hardware/hameg-hmo/protocol.c index e79901ca..f534cb47 100644 --- a/src/hardware/hameg-hmo/protocol.c +++ b/src/hardware/hameg-hmo/protocol.c @@ -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; @@ -711,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++) { @@ -873,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; } @@ -919,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; }