X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Foracle.c;h=cb9b3dbf9230aede137294f91160ddea73db2af4;hb=edd9af8a874ebc9f2a7f02846807229a648917db;hp=80ae699c169b5cc1aa268a931e76515b3db83b89;hpb=fda68e239798cea197a225ed5325f5bb3c2e70de;p=collectd.git diff --git a/src/oracle.c b/src/oracle.c index 80ae699c..cb9b3dbf 100644 --- a/src/oracle.c +++ b/src/oracle.c @@ -59,6 +59,7 @@ struct o_database_s { char *name; + char *host; char *connect_id; char *username; char *password; @@ -173,7 +174,7 @@ static void o_database_free (o_database_t *db) /* {{{ */ * ValuesFrom "value" * * - * + * * * ConnectID "db01" * Username "oracle" @@ -183,33 +184,6 @@ static void o_database_free (o_database_t *db) /* {{{ */ * */ -static int o_config_set_string (char **ret_string, /* {{{ */ - oconfig_item_t *ci) -{ - char *string; - - if ((ci->values_num != 1) - || (ci->values[0].type != OCONFIG_TYPE_STRING)) - { - WARNING ("oracle plugin: The `%s' config option " - "needs exactly one string argument.", ci->key); - return (-1); - } - - string = strdup (ci->values[0].value.string); - if (string == NULL) - { - ERROR ("oracle plugin: strdup failed."); - return (-1); - } - - if (*ret_string != NULL) - free (*ret_string); - *ret_string = string; - - return (0); -} /* }}} int o_config_set_string */ - static int o_config_add_database (oconfig_item_t *ci) /* {{{ */ { o_database_t *db; @@ -224,15 +198,19 @@ static int o_config_add_database (oconfig_item_t *ci) /* {{{ */ return (-1); } - db = (o_database_t *) malloc (sizeof (*db)); + db = calloc (1, sizeof (*db)); if (db == NULL) { - ERROR ("oracle plugin: malloc failed."); + ERROR ("oracle plugin: calloc failed."); return (-1); } - memset (db, 0, sizeof (*db)); + db->name = NULL; + db->host = NULL; + db->connect_id = NULL; + db->username = NULL; + db->password = NULL; - status = o_config_set_string (&db->name, ci); + status = cf_util_get_string (ci, &db->name); if (status != 0) { sfree (db); @@ -245,11 +223,13 @@ static int o_config_add_database (oconfig_item_t *ci) /* {{{ */ oconfig_item_t *child = ci->children + i; if (strcasecmp ("ConnectID", child->key) == 0) - status = o_config_set_string (&db->connect_id, child); + status = cf_util_get_string (child, &db->connect_id); + else if (strcasecmp ("Host", child->key) == 0) + status = cf_util_get_string (child, &db->host); else if (strcasecmp ("Username", child->key) == 0) - status = o_config_set_string (&db->username, child); + status = cf_util_get_string (child, &db->username); else if (strcasecmp ("Password", child->key) == 0) - status = o_config_set_string (&db->password, child); + status = cf_util_get_string (child, &db->password); else if (strcasecmp ("Query", child->key) == 0) status = udb_query_pick_from_list (child, queries, queries_num, &db->queries, &db->queries_num); @@ -292,7 +272,7 @@ static int o_config_add_database (oconfig_item_t *ci) /* {{{ */ if (db->q_prep_areas == NULL) { - WARNING ("oracle plugin: malloc failed"); + WARNING ("oracle plugin: calloc failed"); status = -1; break; } @@ -319,7 +299,7 @@ static int o_config_add_database (oconfig_item_t *ci) /* {{{ */ { o_database_t **temp; - temp = (o_database_t **) realloc (databases, + temp = realloc (databases, sizeof (*databases) * (databases_num + 1)); if (temp == NULL) { @@ -482,7 +462,7 @@ static int o_read_database_query (o_database_t *db, /* {{{ */ { ub4 param_counter = 0; status = OCIAttrGet (oci_statement, OCI_HTYPE_STMT, /* {{{ */ - ¶m_counter, /* size pointer = */ NULL, + ¶m_counter, /* size pointer = */ NULL, OCI_ATTR_PARAM_COUNT, oci_error); if (status != OCI_SUCCESS) { @@ -495,7 +475,7 @@ static int o_read_database_query (o_database_t *db, /* {{{ */ } while (0); /* }}} */ /* Allocate the following buffers: - * + * * +---------------+-----------------------------------+ * ! Name ! Size ! * +---------------+-----------------------------------+ @@ -521,13 +501,12 @@ static int o_read_database_query (o_database_t *db, /* {{{ */ #define ALLOC_OR_FAIL(ptr, ptr_size) \ do { \ size_t alloc_size = (size_t) ((ptr_size)); \ - (ptr) = malloc (alloc_size); \ + (ptr) = calloc (1, alloc_size); \ if ((ptr) == NULL) { \ FREE_ALL; \ - ERROR ("oracle plugin: o_read_database_query: malloc failed."); \ + ERROR ("oracle plugin: o_read_database_query: calloc failed."); \ return (-1); \ } \ - memset ((ptr), 0, alloc_size); \ } while (0) /* Initialize everything to NULL so the above works. */ @@ -613,7 +592,8 @@ static int o_read_database_query (o_database_t *db, /* {{{ */ } /* for (j = 1; j <= param_counter; j++) */ /* }}} End of the ``define'' stuff. */ - status = udb_query_prepare_result (q, prep_area, hostname_g, + status = udb_query_prepare_result (q, prep_area, + (db->host != NULL) ? db->host : hostname_g, /* plugin = */ "oracle", db->name, column_names, column_num, /* interval = */ 0); if (status != 0) @@ -671,7 +651,7 @@ static int o_read_database (o_database_t *db) /* {{{ */ ub4 connection_status; server_handle = NULL; - status = OCIAttrGet ((void *) db->oci_service_context, OCI_HTYPE_SVCCTX, + status = OCIAttrGet ((void *) db->oci_service_context, OCI_HTYPE_SVCCTX, (void *) &server_handle, /* size pointer = */ NULL, OCI_ATTR_SERVER, oci_error); if (status != OCI_SUCCESS) @@ -763,7 +743,7 @@ static int o_shutdown (void) /* {{{ */ OCIHandleFree (databases[i]->oci_service_context, OCI_HTYPE_SVCCTX); databases[i]->oci_service_context = NULL; } - + for (i = 0; i < queries_num; i++) { OCIStmt *oci_statement; @@ -775,7 +755,7 @@ static int o_shutdown (void) /* {{{ */ udb_query_set_user_data (queries[i], NULL); } } - + OCIHandleFree (oci_env, OCI_HTYPE_ENV); oci_env = NULL;