X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Futils_db_query.c;h=fcded6b414687f10d3773d7a42f58ad8c90581eb;hb=9d3906a53e086d520b5ed71ca57118e8f589574b;hp=893d59075b6c0be7a609ba2f1e1424515f5a428b;hpb=0febfbd11d87acd8a0f10bbcf5d4a58bb68b8dc0;p=collectd.git diff --git a/src/utils_db_query.c b/src/utils_db_query.c index 893d5907..fcded6b4 100644 --- a/src/utils_db_query.c +++ b/src/utils_db_query.c @@ -202,8 +202,9 @@ static int udb_result_submit (udb_result_t *r, /* {{{ */ assert (r != NULL); assert (r_area->ds != NULL); assert (((size_t) r_area->ds->ds_num) == r->values_num); + assert (r->values_num > 0); - vl.values = (value_t *) calloc (r_area->ds->ds_num, sizeof (value_t)); + vl.values = (value_t *) calloc (r->values_num, sizeof (value_t)); if (vl.values == NULL) { ERROR ("db query utils: malloc failed."); @@ -245,15 +246,27 @@ static int udb_result_submit (udb_result_t *r, /* {{{ */ { if (r->instance_prefix == NULL) { - strjoin (vl.type_instance, sizeof (vl.type_instance), + int status = strjoin (vl.type_instance, sizeof (vl.type_instance), r_area->instances_buffer, r->instances_num, "-"); + if (status < 0) + { + ERROR ("udb_result_submit: creating type_instance failed with status %d.", + status); + return (status); + } } else { char tmp[DATA_MAX_NAME_LEN]; - strjoin (tmp, sizeof (tmp), r_area->instances_buffer, + int status = strjoin (tmp, sizeof (tmp), r_area->instances_buffer, r->instances_num, "-"); + if (status < 0) + { + ERROR ("udb_result_submit: creating type_instance failed with status %d.", + status); + return (status); + } tmp[sizeof (tmp) - 1] = 0; snprintf (vl.type_instance, sizeof (vl.type_instance), "%s-%s", @@ -637,7 +650,7 @@ static int udb_result_create (const char *query_name, /* {{{ */ /* * Query private functions */ -void udb_query_free_one (udb_query_t *q) /* {{{ */ +static void udb_query_free_one (udb_query_t *q) /* {{{ */ { if (q == NULL) return; @@ -1071,10 +1084,9 @@ udb_query_allocate_preparation_area (udb_query_t *q) /* {{{ */ udb_result_preparation_area_t **next_r_area; udb_result_t *r; - q_area = (udb_query_preparation_area_t *)malloc (sizeof (*q_area)); + q_area = malloc (sizeof (*q_area)); if (q_area == NULL) return NULL; - memset (q_area, 0, sizeof (*q_area)); next_r_area = &q_area->result_prep_areas; @@ -1082,14 +1094,18 @@ udb_query_allocate_preparation_area (udb_query_t *q) /* {{{ */ { udb_result_preparation_area_t *r_area; - r_area = (udb_result_preparation_area_t *)malloc (sizeof (*r_area)); + r_area = malloc (sizeof (*r_area)); if (r_area == NULL) { - for (r_area = q_area->result_prep_areas; - r_area != NULL; r_area = r_area->next) + udb_result_preparation_area_t *a = q_area->result_prep_areas; + + while (a != NULL) { - free (r_area); + udb_result_preparation_area_t *next = a->next; + sfree (a); + a = next; } + free (q_area); return NULL; }