mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-10 03:48:34 +00:00
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:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user