Merged revisions 332939 via svnmerge from

https://origsvn.digium.com/svn/asterisk/branches/1.8

........
  r332939 | rmudgett | 2011-08-22 16:22:24 -0500 (Mon, 22 Aug 2011) | 7 lines
  
  Minor code optimizations.
  
  * Simplify ast_category_browse() logic for easier understanding.
  
  * Remove dead code in ast_variable_delete() and simplify some of its
  logic.
........


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10@332940 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Richard Mudgett
2011-08-22 21:23:40 +00:00
parent d3082a6e01
commit c69f237d3d

View File

@@ -619,22 +619,36 @@ struct ast_variable *ast_category_root(struct ast_config *config, char *cat)
char *ast_category_browse(struct ast_config *config, const char *prev) char *ast_category_browse(struct ast_config *config, const char *prev)
{ {
struct ast_category *cat = NULL; struct ast_category *cat;
if (prev && config->last_browse && (config->last_browse->name == prev)) if (!prev) {
cat = config->last_browse->next; /* First time browse. */
else if (!prev && config->root)
cat = config->root; cat = config->root;
else if (prev) { } else if (config->last_browse && (config->last_browse->name == prev)) {
/* Simple last browse found. */
cat = config->last_browse->next;
} else {
/*
* Config changed since last browse.
*
* First try cheap last browse search. (Rebrowsing a different
* previous category?)
*/
for (cat = config->root; cat; cat = cat->next) { for (cat = config->root; cat; cat = cat->next) {
if (cat->name == prev) { if (cat->name == prev) {
/* Found it. */
cat = cat->next; cat = cat->next;
break; break;
} }
} }
if (!cat) { if (!cat) {
/*
* Have to do it the hard way. (Last category was deleted and
* re-added?)
*/
for (cat = config->root; cat; cat = cat->next) { for (cat = config->root; cat; cat = cat->next) {
if (!strcasecmp(cat->name, prev)) { if (!strcasecmp(cat->name, prev)) {
/* Found it. */
cat = cat->next; cat = cat->next;
break; break;
} }
@@ -690,33 +704,27 @@ int ast_variable_delete(struct ast_category *category, const char *variable, con
{ {
struct ast_variable *cur, *prev=NULL, *curn; struct ast_variable *cur, *prev=NULL, *curn;
int res = -1; int res = -1;
int lineno = 0; int num_item = 0;
int req_item;
cur = category->root; req_item = -1;
while (cur) { if (!ast_strlen_zero(line)) {
if (cur->name == variable) { /* Requesting to delete by item number. */
if (prev) { if (sscanf(line, "%30d", &req_item) != 1
prev->next = cur->next; || req_item < 0) {
if (cur == category->last) /* Invalid item number to delete. */
category->last = prev; return -1;
} else {
category->root = cur->next;
if (cur == category->last)
category->last = NULL;
}
cur->next = NULL;
ast_variables_destroy(cur);
return 0;
} }
prev = cur;
cur = cur->next;
} }
prev = NULL; prev = NULL;
cur = category->root; cur = category->root;
while (cur) { while (cur) {
curn = cur->next; curn = cur->next;
if ((!ast_strlen_zero(line) && lineno == atoi(line)) || (ast_strlen_zero(line) && !strcasecmp(cur->name, variable) && (ast_strlen_zero(match) || !strcasecmp(cur->value, match)))) { /* Delete by item number or by variable name with optional value. */
if ((0 <= req_item && num_item == req_item)
|| (req_item < 0 && !strcasecmp(cur->name, variable)
&& (ast_strlen_zero(match) || !strcasecmp(cur->value, match)))) {
if (prev) { if (prev) {
prev->next = cur->next; prev->next = cur->next;
if (cur == category->last) if (cur == category->last)
@@ -726,14 +734,13 @@ int ast_variable_delete(struct ast_category *category, const char *variable, con
if (cur == category->last) if (cur == category->last)
category->last = NULL; category->last = NULL;
} }
cur->next = NULL; ast_variable_destroy(cur);
ast_variables_destroy(cur);
res = 0; res = 0;
} else } else
prev = cur; prev = cur;
cur = curn; cur = curn;
lineno++; ++num_item;
} }
return res; return res;
} }
@@ -2198,7 +2205,7 @@ int ast_check_realtime(const char *family)
} }
/*! \brief Check if there's any realtime engines loaded */ /*! \brief Check if there's any realtime engines loaded */
int ast_realtime_enabled() int ast_realtime_enabled(void)
{ {
return config_maps ? 1 : 0; return config_maps ? 1 : 0;
} }
@@ -2680,7 +2687,7 @@ static struct ast_cli_entry cli_config[] = {
AST_CLI_DEFINE(handle_cli_config_list, "Show all files that have loaded a configuration file"), AST_CLI_DEFINE(handle_cli_config_list, "Show all files that have loaded a configuration file"),
}; };
int register_config_cli() int register_config_cli(void)
{ {
ast_cli_register_multiple(cli_config, ARRAY_LEN(cli_config)); ast_cli_register_multiple(cli_config, ARRAY_LEN(cli_config));
return 0; return 0;