X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fscpi%2Fscpi.c;h=ec0ddc555c73b37b6cdec6799ecf9573fee3534c;hb=cae328b54c7b9679bafa6cd4fb00eb0f5894e8a3;hp=0f767f2a2de1c6862b61620d6e2dc0b9178c2f7d;hpb=9b915e3a41311bff4d7089f564f3b2716f2004a7;p=libsigrok.git diff --git a/src/scpi/scpi.c b/src/scpi/scpi.c index 0f767f2a..ec0ddc55 100644 --- a/src/scpi/scpi.c +++ b/src/scpi/scpi.c @@ -863,28 +863,30 @@ SR_PRIV int sr_scpi_get_floatv(struct sr_scpi_dev_inst *scpi, float tmp; char *response; gchar **ptr, **tokens; + size_t token_count; GArray *response_array; *scpi_response = NULL; - response = NULL; - tokens = NULL; + response = NULL; ret = sr_scpi_get_string(scpi, command, &response); if (ret != SR_OK && !response) return ret; tokens = g_strsplit(response, ",", 0); - ptr = tokens; + token_count = g_strv_length(tokens); - response_array = g_array_sized_new(TRUE, FALSE, sizeof(float), 256); + response_array = g_array_sized_new(TRUE, FALSE, + sizeof(float), token_count + 1); + ptr = tokens; while (*ptr) { - if (sr_atof_ascii(*ptr, &tmp) == SR_OK) - response_array = g_array_append_val(response_array, - tmp); - else + ret = sr_atof_ascii(*ptr, &tmp); + if (ret != SR_OK) { ret = SR_ERR_DATA; - + break; + } + response_array = g_array_append_val(response_array, tmp); ptr++; } g_strfreev(tokens); @@ -920,28 +922,30 @@ SR_PRIV int sr_scpi_get_uint8v(struct sr_scpi_dev_inst *scpi, int tmp, ret; char *response; gchar **ptr, **tokens; + size_t token_count; GArray *response_array; *scpi_response = NULL; - response = NULL; - tokens = NULL; + response = NULL; ret = sr_scpi_get_string(scpi, command, &response); if (ret != SR_OK && !response) return ret; tokens = g_strsplit(response, ",", 0); - ptr = tokens; + token_count = g_strv_length(tokens); - response_array = g_array_sized_new(TRUE, FALSE, sizeof(uint8_t), 256); + response_array = g_array_sized_new(TRUE, FALSE, + sizeof(uint8_t), token_count + 1); + ptr = tokens; while (*ptr) { - if (sr_atoi(*ptr, &tmp) == SR_OK) - response_array = g_array_append_val(response_array, - tmp); - else + ret = sr_atoi(*ptr, &tmp); + if (ret != SR_OK) { ret = SR_ERR_DATA; - + break; + } + response_array = g_array_append_val(response_array, tmp); ptr++; } g_strfreev(tokens); @@ -1151,7 +1155,7 @@ SR_PRIV int sr_scpi_get_hw_id(struct sr_scpi_dev_inst *scpi, } g_free(response); - hw_info = g_malloc0(sizeof(struct sr_scpi_hw_info)); + hw_info = g_malloc0(sizeof(*hw_info)); idn_substr = g_strstr_len(tokens[0], -1, "IDN "); if (idn_substr == NULL)