From 5eb7875243905927693242b52f5434634e64a1d8 Mon Sep 17 00:00:00 2001 From: Sean Bright <sean.bright@gmail.com> Date: Tue, 21 Feb 2017 09:56:54 -0500 Subject: [PATCH] realtime: Centralize some common realtime backend code All of the realtime backends create artificial ast_categorys to pass back into the core as query results. These categories have no filename or line number information associated with them and the backends differ slightly on how they create them. So create a couple helper macros to help make things more consistent. Also updated the call sites to remove redundant error messages about memory allocation failure. Note that res_config_ldap sets the category filename to the 'table name' but that is not read by anything in the core, so I've dropped it. Change-Id: I3a1fd91e0c807dea1ce3b643b0a6fe5be9002897 --- addons/res_config_mysql.c | 7 +++---- include/asterisk/config.h | 12 ++++++++++++ res/res_config_curl.c | 7 +++++-- res/res_config_ldap.c | 6 ++---- res/res_config_odbc.c | 6 ++---- res/res_config_pgsql.c | 9 ++++++--- res/res_config_sqlite.c | 8 +++----- res/res_config_sqlite3.c | 7 ++++--- 8 files changed, 37 insertions(+), 25 deletions(-) diff --git a/addons/res_config_mysql.c b/addons/res_config_mysql.c index b9ca81f367..cdc641bd17 100644 --- a/addons/res_config_mysql.c +++ b/addons/res_config_mysql.c @@ -525,9 +525,8 @@ static struct ast_config *realtime_multi_mysql(const char *database, const char while ((row = mysql_fetch_row(result))) { var = NULL; - cat = ast_category_new("", "", -1); + cat = ast_category_new_anonymous(); if (!cat) { - ast_log(LOG_WARNING, "Out of memory!\n"); continue; } for (i = 0; i < numFields; i++) { @@ -936,8 +935,8 @@ static struct ast_config *config_mysql(const char *database, const char *table, } if (strcmp(last, row[0]) || last_cat_metric != atoi(row[3])) { - if (!(cur_cat = ast_category_new(row[0], "", -1))) { - ast_log(LOG_WARNING, "Out of memory!\n"); + cur_cat = ast_category_new_dynamic(row[0]); + if (!cur_cat) { break; } strcpy(last, row[0]); diff --git a/include/asterisk/config.h b/include/asterisk/config.h index 0b59f63b6d..4dc473cd71 100644 --- a/include/asterisk/config.h +++ b/include/asterisk/config.h @@ -833,6 +833,18 @@ const char *ast_config_option(struct ast_config *cfg, const char *cat, const cha */ struct ast_category *ast_category_new(const char *name, const char *in_file, int lineno); +/*! + * \brief Create a category that is not backed by a file + * + * \param name name of new category + */ +#define ast_category_new_dynamic(name) ast_category_new(name, "", -1) + +/*! + * \brief Create a nameless category that is not backed by a file + */ +#define ast_category_new_anonymous() ast_category_new_dynamic("") + /*! * \brief Create a category making it a template * diff --git a/res/res_config_curl.c b/res/res_config_curl.c index a51802928b..bc1a3fb356 100644 --- a/res/res_config_curl.c +++ b/res/res_config_curl.c @@ -184,7 +184,8 @@ static struct ast_config *realtime_multi_curl(const char *url, const char *unuse continue; } - if (!(cat = ast_category_new("", "", 99999))) { + cat = ast_category_new_anonymous(); + if (!cat) { continue; } @@ -571,8 +572,10 @@ static struct ast_config *config_curl(const char *url, const char *unused, const } if (!cat || strcmp(category, cur_cat) || last_cat_metric != cat_metric) { - if (!(cat = ast_category_new(category, "", 99999))) + cat = ast_category_new_dynamic(category); + if (!cat) { break; + } cur_cat = category; last_cat_metric = cat_metric; ast_category_append(cfg, cat); diff --git a/res/res_config_ldap.c b/res/res_config_ldap.c index fd21aab809..9b73493e9d 100644 --- a/res/res_config_ldap.c +++ b/res/res_config_ldap.c @@ -1045,10 +1045,8 @@ static struct ast_config *realtime_multi_ldap(const char *basedn, struct ast_variable **p = vars; while (*p) { - struct ast_category *cat = NULL; - cat = ast_category_new("", table_name, -1); + struct ast_category *cat = ast_category_new_anonymous(); if (!cat) { - ast_log(LOG_ERROR, "Unable to create a new category!\n"); break; } else { struct ast_variable *var = *p; @@ -1197,7 +1195,7 @@ static struct ast_config *config_ldap(const char *basedn, const char *table_name if (!last_category || strcmp(last_category, categories[i].name) || last_category_metric != categories[i].metric) { - cur_cat = ast_category_new(categories[i].name, table_name, -1); + cur_cat = ast_category_new_dynamic(categories[i].name); if (!cur_cat) { break; } diff --git a/res/res_config_odbc.c b/res/res_config_odbc.c index 893b9d897d..583a84558a 100644 --- a/res/res_config_odbc.c +++ b/res/res_config_odbc.c @@ -409,9 +409,8 @@ static struct ast_config *realtime_multi_odbc(const char *database, const char * ast_log(LOG_WARNING, "SQL Fetch error! [%s]\n", ast_str_buffer(sql)); continue; } - cat = ast_category_new("","",99999); + cat = ast_category_new_anonymous(); if (!cat) { - ast_log(LOG_WARNING, "Out of memory!\n"); continue; } for (x=0;x<colcount;x++) { @@ -1018,9 +1017,8 @@ static struct ast_config *config_odbc(const char *database, const char *table, c continue; } if (strcmp(last, q.category) || last_cat_metric != q.cat_metric) { - cur_cat = ast_category_new(q.category, "", 99999); + cur_cat = ast_category_new_dynamic(q.category); if (!cur_cat) { - ast_log(LOG_WARNING, "Out of memory!\n"); break; } strcpy(last, q.category); diff --git a/res/res_config_pgsql.c b/res/res_config_pgsql.c index 58c34d0827..824adbf341 100644 --- a/res/res_config_pgsql.c +++ b/res/res_config_pgsql.c @@ -683,8 +683,10 @@ static struct ast_config *realtime_multi_pgsql(const char *database, const char for (rowIndex = 0; rowIndex < num_rows; rowIndex++) { var = NULL; - if (!(cat = ast_category_new("","",99999))) + cat = ast_category_new_anonymous(); + if (!cat) { continue; + } for (i = 0; i < numFields; i++) { stringp = PQgetvalue(result, rowIndex, i); while (stringp) { @@ -1164,9 +1166,10 @@ static struct ast_config *config_pgsql(const char *database, const char *table, } if (strcmp(last, field_category) || last_cat_metric != atoi(field_cat_metric)) { - cur_cat = ast_category_new(field_category, "", 99999); - if (!cur_cat) + cur_cat = ast_category_new_dynamic(field_category); + if (!cur_cat) { break; + } ast_copy_string(last, field_category, sizeof(last)); last_cat_metric = atoi(field_cat_metric); ast_category_append(cfg, cur_cat); diff --git a/res/res_config_sqlite.c b/res/res_config_sqlite.c index b97ef7a86a..a5a831ea30 100644 --- a/res/res_config_sqlite.c +++ b/res/res_config_sqlite.c @@ -875,10 +875,8 @@ static int add_cfg_entry(void *arg, int argc, char **argv, char **columnNames) } if (!args->cat_name || strcmp(args->cat_name, argv[RES_CONFIG_SQLITE_CONFIG_CATEGORY])) { - args->cat = ast_category_new(argv[RES_CONFIG_SQLITE_CONFIG_CATEGORY], "", 99999); - + args->cat = ast_category_new_dynamic(argv[RES_CONFIG_SQLITE_CONFIG_CATEGORY]); if (!args->cat) { - ast_log(LOG_WARNING, "Unable to allocate category\n"); return 1; } @@ -1087,8 +1085,8 @@ static int add_rt_multi_cfg_entry(void *arg, int argc, char **argv, char **colum return 1; } - if (!(cat = ast_category_new(cat_name, "", 99999))) { - ast_log(LOG_WARNING, "Unable to allocate category\n"); + cat = ast_category_new_dynamic(cat_name); + if (!cat) { return 1; } diff --git a/res/res_config_sqlite3.c b/res/res_config_sqlite3.c index b9a1062150..5362e9ede1 100644 --- a/res/res_config_sqlite3.c +++ b/res/res_config_sqlite3.c @@ -505,7 +505,8 @@ static int append_row_to_cfg(void *arg, int num_columns, char **values, char **c struct ast_category *cat; int i; - if (!(cat = ast_category_new("", "", 99999))) { + cat = ast_category_new_anonymous(); + if (!cat) { return SQLITE_ABORT; } @@ -725,8 +726,8 @@ static int static_realtime_cb(void *arg, int num_columns, char **values, char ** } if (!args->cat_name || strcmp(args->cat_name, values[COL_CATEGORY])) { - if (!(args->cat = ast_category_new(values[COL_CATEGORY], "", 99999))) { - ast_log(LOG_WARNING, "Unable to allocate category\n"); + args->cat = ast_category_new_dynamic(values[COL_CATEGORY]); + if (!args->cat) { return SQLITE_ABORT; } -- GitLab