X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Fdbi.c;h=4ef9f8c59f3fe5f08fb39b714366ae4ab37cf630;hp=a577aefc766e4ad9326a0ee2cc2b1c844ebe7511;hb=d486225f89ea52d8ed2b4242eba2ad94c409f837;hpb=88bd89f106abd5c0a9f9a80246e31a16c36a3c6d diff --git a/src/dbi.c b/src/dbi.c index a577aefc..4ef9f8c5 100644 --- a/src/dbi.c +++ b/src/dbi.c @@ -54,7 +54,7 @@ struct cdbi_driver_option_s /* {{{ */ char *string; int numeric; } value; - _Bool is_numeric; + bool is_numeric; }; typedef struct cdbi_driver_option_s cdbi_driver_option_t; /* }}} */ @@ -62,6 +62,7 @@ struct cdbi_database_s /* {{{ */ { char *name; char *select_db; + char *plugin_name; cdtime_t interval; @@ -82,12 +83,12 @@ typedef struct cdbi_database_s cdbi_database_t; /* }}} */ * Global variables */ #if !defined(HAVE_LEGACY_LIBDBI) || !HAVE_LEGACY_LIBDBI -static dbi_inst dbi_instance = 0; +static dbi_inst dbi_instance; #endif -static udb_query_t **queries = NULL; -static size_t queries_num = 0; -static cdbi_database_t **databases = NULL; -static size_t databases_num = 0; +static udb_query_t **queries; +static size_t queries_num; +static cdbi_database_t **databases; +static size_t databases_num; static int cdbi_read_database(user_data_t *ud); @@ -172,7 +173,10 @@ static void cdbi_database_free(cdbi_database_t *db) /* {{{ */ return; sfree(db->name); + sfree(db->select_db); + sfree(db->plugin_name); sfree(db->driver); + sfree(db->host); for (size_t i = 0; i < db->driver_options_num; i++) { sfree(db->driver_options[i].key); @@ -184,7 +188,10 @@ static void cdbi_database_free(cdbi_database_t *db) /* {{{ */ if (db->q_prep_areas) for (size_t i = 0; i < db->queries_num; ++i) udb_query_delete_preparation_area(db->q_prep_areas[i]); - free(db->q_prep_areas); + sfree(db->q_prep_areas); + /* N.B.: db->queries references objects "owned" by the global queries + * variable. Free the array here, but not the content. */ + sfree(db->queries); sfree(db); } /* }}} void cdbi_database_free */ @@ -251,7 +258,7 @@ static int cdbi_config_add_database_driver_option(cdbi_database_t *db, /* {{{ */ } else { assert(ci->values[1].type == OCONFIG_TYPE_NUMBER); option->value.numeric = (int)(ci->values[1].value.number + .5); - option->is_numeric = 1; + option->is_numeric = true; } db->driver_options_num++; @@ -298,6 +305,8 @@ static int cdbi_config_add_database(oconfig_item_t *ci) /* {{{ */ status = cf_util_get_string(child, &db->host); else if (strcasecmp("Interval", child->key) == 0) status = cf_util_get_cdtime(child, &db->interval); + else if (strcasecmp("Plugin", child->key) == 0) + status = cf_util_get_string(child, &db->plugin_name); else { WARNING("dbi plugin: Option `%s' not allowed here.", child->key); status = -1; @@ -398,7 +407,7 @@ static int cdbi_config(oconfig_item_t *ci) /* {{{ */ static int cdbi_init(void) /* {{{ */ { - static int did_init = 0; + static int did_init; int status; if (did_init != 0) @@ -488,8 +497,8 @@ static int cdbi_read_database_query(cdbi_database_t *db, /* {{{ */ } column_num = (size_t)db_status; - DEBUG("cdbi_read_database_query (%s, %s): There are %zu columns.", db->name, - udb_query_get_name(q), column_num); + DEBUG("cdbi_read_database_query (%s, %s): There are %" PRIsz " columns.", + db->name, udb_query_get_name(q), column_num); } /* Allocate `column_names' and `column_values'. {{{ */ @@ -530,7 +539,7 @@ static int cdbi_read_database_query(cdbi_database_t *db, /* {{{ */ column_name = dbi_result_get_field_name(res, (unsigned int)(i + 1)); if (column_name == NULL) { ERROR("dbi plugin: cdbi_read_database_query (%s, %s): " - "Cannot retrieve name of field %zu.", + "Cannot retrieve name of field %" PRIsz ".", db->name, udb_query_get_name(q), i + 1); BAIL_OUT(-1); } @@ -540,7 +549,8 @@ static int cdbi_read_database_query(cdbi_database_t *db, /* {{{ */ udb_query_prepare_result( q, prep_area, (db->host ? db->host : hostname_g), - /* plugin = */ "dbi", db->name, column_names, column_num, + /* plugin = */ (db->plugin_name != NULL) ? db->plugin_name : "dbi", + db->name, column_names, column_num, /* interval = */ (db->interval > 0) ? db->interval : 0); /* 0 = error; 1 = success; */ @@ -569,7 +579,7 @@ static int cdbi_read_database_query(cdbi_database_t *db, /* {{{ */ if (status != 0) { ERROR("dbi plugin: cdbi_read_database_query (%s, %s): " - "cdbi_result_get_field (%zu) failed.", + "cdbi_result_get_field (%" PRIsz ") failed.", db->name, udb_query_get_name(q), i + 1); status = -1; break;