minor cleanups ...

- use for loops instead of while loops for basic list traversals
- only calculate word length one time in CLI complete functions
- use calloc instead of malloc + memset
- remove some unnecessary casts
- formatting tweaks 


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@7618 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Russell Bryant
2005-12-24 06:23:36 +00:00
parent 22315a44c4
commit 85efb20313
2 changed files with 142 additions and 225 deletions

View File

@@ -626,7 +626,7 @@ int ast_parseable_goto(struct ast_channel *chan, const char *goto_string);
int ast_explicit_goto(struct ast_channel *chan, const char *context, const char *exten, int priority);
int ast_async_goto_if_exists(struct ast_channel *chan, const char *context, const char *exten, int priority);
struct ast_custom_function* ast_custom_function_find(char *name);
struct ast_custom_function* ast_custom_function_find(const char *name);
int ast_custom_function_unregister(struct ast_custom_function *acf);
int ast_custom_function_register(struct ast_custom_function *acf);

301
pbx.c
View File

@@ -102,45 +102,46 @@ AST_APP_OPTIONS(waitexten_opts, {
struct ast_context;
/*!\brief ast_exten: An extension
/*!
\brief ast_exten: An extension
The dialplan is saved as a linked list with each context
having it's own linked list of extensions - one item per
priority.
*/
struct ast_exten {
char *exten; /* Extension name */
int matchcid; /* Match caller id ? */
char *cidmatch; /* Caller id to match for this extension */
int priority; /* Priority */
char *label; /* Label */
struct ast_context *parent; /* The context this extension belongs to */
char *app; /* Application to execute */
void *data; /* Data to use (arguments) */
void (*datad)(void *); /* Data destructor */
struct ast_exten *peer; /* Next higher priority with our extension */
const char *registrar; /* Registrar */
struct ast_exten *next; /* Extension with a greater ID */
char *exten; /*!< Extension name */
int matchcid; /*!< Match caller id ? */
char *cidmatch; /*!< Caller id to match for this extension */
int priority; /*!< Priority */
char *label; /*!< Label */
struct ast_context *parent; /*!< The context this extension belongs to */
char *app; /*!< Application to execute */
void *data; /*!< Data to use (arguments) */
void (*datad)(void *); /*!< Data destructor */
struct ast_exten *peer; /*!< Next higher priority with our extension */
const char *registrar; /*!< Registrar */
struct ast_exten *next; /*!< Extension with a greater ID */
char stuff[0];
};
/*! \brief ast_include: include= support in extensions.conf */
struct ast_include {
char *name;
char *rname; /* Context to include */
const char *registrar; /* Registrar */
int hastime; /* If time construct exists */
struct ast_timing timing; /* time construct */
struct ast_include *next; /* Link them together */
char *rname; /*!< Context to include */
const char *registrar; /*!< Registrar */
int hastime; /*!< If time construct exists */
struct ast_timing timing; /*!< time construct */
struct ast_include *next; /*!< Link them together */
char stuff[0];
};
/*! \brief ast_sw: Switch statement in extensions.conf */
struct ast_sw {
char *name;
const char *registrar; /* Registrar */
char *data; /* Data load */
const char *registrar; /*!< Registrar */
char *data; /*!< Data load */
int eval;
struct ast_sw *next; /* Link them together */
struct ast_sw *next; /*!< Link them together */
char *tmpdata;
char stuff[0];
};
@@ -168,10 +169,10 @@ struct ast_context {
/*! \brief ast_app: A registered application */
struct ast_app {
int (*execute)(struct ast_channel *chan, void *data);
const char *synopsis; /* Synopsis text for 'show applications' */
const char *description; /* Description (help text) for 'show application <name>' */
struct ast_app *next; /* Next app in list */
char name[0]; /* Name of the application */
const char *synopsis; /*!< Synopsis text for 'show applications' */
const char *description; /*!< Description (help text) for 'show application <name>' */
struct ast_app *next; /*!< Next app in list */
char name[0]; /*!< Name of the application */
};
/*! \brief ast_state_cb: An extension state notify register item */
@@ -443,14 +444,14 @@ static struct pbx_builtin {
};
static struct ast_context *contexts = NULL;
AST_MUTEX_DEFINE_STATIC(conlock); /* Lock for the ast_context list */
AST_MUTEX_DEFINE_STATIC(conlock); /*!< Lock for the ast_context list */
static struct ast_app *apps = NULL;
AST_MUTEX_DEFINE_STATIC(applock); /* Lock for the application list */
AST_MUTEX_DEFINE_STATIC(applock); /*!< Lock for the application list */
struct ast_switch *switches = NULL;
AST_MUTEX_DEFINE_STATIC(switchlock); /* Lock for switches */
AST_MUTEX_DEFINE_STATIC(switchlock); /*!< Lock for switches */
AST_MUTEX_DEFINE_STATIC(hintlock); /* Lock for extension state notifys */
AST_MUTEX_DEFINE_STATIC(hintlock); /*!< Lock for extension state notifys */
static int stateid = 1;
struct ast_hint *hints = NULL;
struct ast_state_cb *statecbs = NULL;
@@ -511,11 +512,9 @@ struct ast_app *pbx_findapp(const char *app)
ast_log(LOG_WARNING, "Unable to obtain application lock\n");
return NULL;
}
tmp = apps;
while(tmp) {
for (tmp = apps; tmp; tmp = tmp->next) {
if (!strcasecmp(tmp->name, app))
break;
tmp = tmp->next;
}
ast_mutex_unlock(&applock);
return tmp;
@@ -529,11 +528,9 @@ static struct ast_switch *pbx_findswitch(const char *sw)
ast_log(LOG_WARNING, "Unable to obtain application lock\n");
return NULL;
}
asw = switches;
while(asw) {
for (asw = switches; asw; asw = asw->next) {
if (!strcasecmp(asw->name, sw))
break;
asw = asw->next;
}
ast_mutex_unlock(&switchlock);
return asw;
@@ -668,11 +665,9 @@ struct ast_context *ast_context_find(const char *name)
struct ast_context *tmp;
ast_mutex_lock(&conlock);
if (name) {
tmp = contexts;
while(tmp) {
for (tmp = contexts; tmp; tmp = tmp->next) {
if (!strcasecmp(name, tmp->name))
break;
tmp = tmp->next;
}
} else
tmp = contexts;
@@ -733,7 +728,7 @@ static struct ast_exten *pbx_find_extension(struct ast_channel *chan, struct ast
tmp = bypass;
else
tmp = contexts;
while(tmp) {
for (; tmp; tmp = tmp->next) {
/* Match context */
if (bypass || !strcmp(tmp->name, context)) {
struct ast_exten *earlymatch = NULL;
@@ -753,10 +748,9 @@ static struct ast_exten *pbx_find_extension(struct ast_channel *chan, struct ast
So ignore it for now, unless there's a better match */
earlymatch = eroot;
} else {
e = eroot;
if (*status < STATUS_NO_PRIORITY)
*status = STATUS_NO_PRIORITY;
while(e) {
for (e = eroot; e; e = e->peer) {
/* Match priority */
if (action == HELPER_FINDLABEL) {
if (*status < STATUS_NO_LABEL)
@@ -771,7 +765,6 @@ static struct ast_exten *pbx_find_extension(struct ast_channel *chan, struct ast
*foundcontext = context;
return e;
}
e = e->peer;
}
}
}
@@ -784,8 +777,7 @@ static struct ast_exten *pbx_find_extension(struct ast_channel *chan, struct ast
return NULL;
}
/* Check alternative switches */
sw = tmp->alts;
while(sw) {
for (sw = tmp->alts; sw; sw = sw->next) {
if ((asw = pbx_findswitch(sw->name))) {
/* Substitute variables now */
if (sw->eval)
@@ -806,25 +798,21 @@ static struct ast_exten *pbx_find_extension(struct ast_channel *chan, struct ast
} else {
ast_log(LOG_WARNING, "No such switch '%s'\n", sw->name);
}
sw = sw->next;
}
/* Setup the stack */
incstack[*stacklen] = tmp->name;
(*stacklen)++;
/* Now try any includes we have in this context */
i = tmp->includes;
while(i) {
for (i = tmp->includes; i; i = i->next) {
if (include_valid(i)) {
if ((e = pbx_find_extension(chan, bypass, i->rname, exten, priority, label, callerid, action, incstack, stacklen, status, swo, data, foundcontext)))
return e;
if (*swo)
return NULL;
}
i = i->next;
}
break;
}
tmp = tmp->next;
}
return NULL;
}
@@ -1194,6 +1182,9 @@ static char *complete_show_function(char *line, char *word, int pos, int state)
{
struct ast_custom_function *acf;
int which = 0;
int wordlen;
wordlen = strlen(word);
/* try to lock functions list ... */
if (ast_mutex_lock(&acflock)) {
@@ -1201,23 +1192,21 @@ static char *complete_show_function(char *line, char *word, int pos, int state)
return NULL;
}
acf = acf_root;
while (acf) {
if (!strncasecmp(word, acf->name, strlen(word))) {
for (acf = acf_root; acf; acf = acf->next) {
if (!strncasecmp(word, acf->name, wordlen)) {
if (++which > state) {
char *ret = strdup(acf->name);
ast_mutex_unlock(&acflock);
return ret;
}
}
acf = acf->next;
}
ast_mutex_unlock(&acflock);
return NULL;
}
struct ast_custom_function* ast_custom_function_find(char *name)
struct ast_custom_function* ast_custom_function_find(const char *name)
{
struct ast_custom_function *acfptr;
@@ -1677,7 +1666,8 @@ static int pbx_extension_helper(struct ast_channel *c, struct ast_context *con,
return -1;
}
default:
ast_log(LOG_WARNING, "Huh (%d)?\n", action); return -1;
ast_log(LOG_WARNING, "Huh (%d)?\n", action);
return -1;
}
} else if (sw) {
switch(action) {
@@ -1913,23 +1903,20 @@ int ast_extension_state_add(const char *context, const char *exten,
if (!context && !exten) {
ast_mutex_lock(&hintlock);
cblist = statecbs;
while (cblist) {
for (cblist = statecbs; cblist; cblist = cblist->next) {
if (cblist->callback == callback) {
cblist->data = data;
ast_mutex_unlock(&hintlock);
return 0;
}
cblist = cblist->next;
}
/* Now insert the callback */
cblist = malloc(sizeof(struct ast_state_cb));
cblist = calloc(1, sizeof(struct ast_state_cb));
if (!cblist) {
ast_mutex_unlock(&hintlock);
return -1;
}
memset(cblist, 0, sizeof(struct ast_state_cb));
cblist->id = 0;
cblist->callback = callback;
cblist->data = data;
@@ -1952,12 +1939,10 @@ int ast_extension_state_add(const char *context, const char *exten,
/* Find the hint in the list of hints */
ast_mutex_lock(&hintlock);
list = hints;
while (list) {
for (list = hints; list; list = list->next) {
if (list->exten == e)
break;
list = list->next;
}
if (!list) {
@@ -1967,12 +1952,11 @@ int ast_extension_state_add(const char *context, const char *exten,
}
/* Now insert the callback in the callback list */
cblist = malloc(sizeof(struct ast_state_cb));
cblist = calloc(1, sizeof(struct ast_state_cb));
if (!cblist) {
ast_mutex_unlock(&hintlock);
return -1;
}
memset(cblist, 0, sizeof(struct ast_state_cb));
cblist->id = stateid++; /* Unique ID for this callback */
cblist->callback = callback; /* Pointer to callback routine */
cblist->data = data; /* Data for the callback */
@@ -1998,8 +1982,7 @@ int ast_extension_state_del(int id, ast_state_cb_type callback)
/* id is zero is a callback without extension */
if (!id) {
cbprev = NULL;
cblist = statecbs;
while (cblist) {
for (cblist = statecbs; cblist; cblist = cblist->next) {
if (cblist->callback == callback) {
if (!cbprev)
statecbs = cblist->next;
@@ -2012,7 +1995,6 @@ int ast_extension_state_del(int id, ast_state_cb_type callback)
return 0;
}
cbprev = cblist;
cblist = cblist->next;
}
ast_mutex_lock(&hintlock);
@@ -2021,11 +2003,9 @@ int ast_extension_state_del(int id, ast_state_cb_type callback)
/* id greater than zero is a callback with extension */
/* Find the callback based on ID */
list = hints;
while (list) {
cblist = list->callbacks;
for (list = hints; list; list = list->next) {
cbprev = NULL;
while (cblist) {
for (cblist = list->callbacks; cblist; cblist = cblist->next) {
if (cblist->id==id) {
if (!cbprev)
list->callbacks = cblist->next;
@@ -2038,9 +2018,7 @@ int ast_extension_state_del(int id, ast_state_cb_type callback)
return 0;
}
cbprev = cblist;
cblist = cblist->next;
}
list = list->next;
}
ast_mutex_unlock(&hintlock);
@@ -2056,23 +2034,21 @@ static int ast_add_hint(struct ast_exten *e)
return -1;
ast_mutex_lock(&hintlock);
list = hints;
/* Search if hint exists, do nothing */
while (list) {
for (list = hints; list; list = list->next) {
if (list->exten == e) {
ast_mutex_unlock(&hintlock);
if (option_debug > 1)
ast_log(LOG_DEBUG, "HINTS: Not re-adding existing hint %s: %s\n", ast_get_extension_name(e), ast_get_extension_app(e));
return -1;
}
list = list->next;
}
if (option_debug > 1)
ast_log(LOG_DEBUG, "HINTS: Adding hint %s: %s\n", ast_get_extension_name(e), ast_get_extension_app(e));
list = malloc(sizeof(struct ast_hint));
list = calloc(1, sizeof(struct ast_hint));
if (!list) {
ast_mutex_unlock(&hintlock);
if (option_debug > 1)
@@ -2080,7 +2056,6 @@ static int ast_add_hint(struct ast_exten *e)
return -1;
}
/* Initialize and insert new item at the top */
memset(list, 0, sizeof(struct ast_hint));
list->exten = e;
list->laststate = ast_extension_state2(e);
list->next = hints;
@@ -2096,16 +2071,15 @@ static int ast_change_hint(struct ast_exten *oe, struct ast_exten *ne)
struct ast_hint *list;
ast_mutex_lock(&hintlock);
list = hints;
while(list) {
for (list = hints; list; list = list->next) {
if (list->exten == oe) {
list->exten = ne;
ast_mutex_unlock(&hintlock);
return 0;
}
list = list->next;
}
ast_mutex_unlock(&hintlock);
return -1;
@@ -2123,8 +2097,7 @@ static int ast_remove_hint(struct ast_exten *e)
ast_mutex_lock(&hintlock);
list = hints;
while(list) {
for (list = hints; list; list = list->next) {
if (list->exten == e) {
cbprev = NULL;
cblist = list->callbacks;
@@ -2145,10 +2118,8 @@ static int ast_remove_hint(struct ast_exten *e)
ast_mutex_unlock(&hintlock);
return 0;
} else {
prev = list;
list = list->next;
}
prev = list;
}
ast_mutex_unlock(&hintlock);
@@ -2224,7 +2195,7 @@ static int __ast_pbx_run(struct ast_channel *c)
/* A little initial setup here */
if (c->pbx)
ast_log(LOG_WARNING, "%s already has PBX structure??\n", c->name);
c->pbx = malloc(sizeof(struct ast_pbx));
c->pbx = calloc(1, sizeof(struct ast_pbx));
if (!c->pbx) {
ast_log(LOG_ERROR, "Out of memory\n");
return -1;
@@ -2240,7 +2211,6 @@ static int __ast_pbx_run(struct ast_channel *c)
ast_cdr_init(c->cdr, c);
}
}
memset(c->pbx, 0, sizeof(struct ast_pbx));
/* Set reasonable defaults */
c->pbx->rtimeout = 10;
c->pbx->dtimeout = 5;
@@ -2561,8 +2531,7 @@ int ast_context_remove_include(const char *context, const char *include, const c
if (ast_lock_contexts()) return -1;
/* walk contexts and search for the right one ...*/
c = ast_walk_contexts(NULL);
while (c) {
for (c = ast_walk_contexts(NULL); c; c = ast_walk_contexts(c)) {
/* we found one ... */
if (!strcmp(ast_get_context_name(c), context)) {
int ret;
@@ -2574,7 +2543,6 @@ int ast_context_remove_include(const char *context, const char *include, const c
/* ... return results */
return ret;
}
c = ast_walk_contexts(c);
}
/* we can't find the right one context */
@@ -2597,8 +2565,7 @@ int ast_context_remove_include2(struct ast_context *con, const char *include, co
if (ast_mutex_lock(&con->lock)) return -1;
/* walk includes */
i = con->includes;
while (i) {
for (i = con->includes; i; i = i->next) {
/* find our include */
if (!strcmp(i->name, include) &&
(!registrar || !strcmp(i->registrar, registrar))) {
@@ -2613,7 +2580,6 @@ int ast_context_remove_include2(struct ast_context *con, const char *include, co
return 0;
}
pi = i;
i = i->next;
}
/* we can't find the right include */
@@ -2633,8 +2599,7 @@ int ast_context_remove_switch(const char *context, const char *sw, const char *d
if (ast_lock_contexts()) return -1;
/* walk contexts and search for the right one ...*/
c = ast_walk_contexts(NULL);
while (c) {
for (c = ast_walk_contexts(NULL); c; c = ast_walk_contexts(c)) {
/* we found one ... */
if (!strcmp(ast_get_context_name(c), context)) {
int ret;
@@ -2646,7 +2611,6 @@ int ast_context_remove_switch(const char *context, const char *sw, const char *d
/* ... return results */
return ret;
}
c = ast_walk_contexts(c);
}
/* we can't find the right one context */
@@ -2669,8 +2633,7 @@ int ast_context_remove_switch2(struct ast_context *con, const char *sw, const ch
if (ast_mutex_lock(&con->lock)) return -1;
/* walk switchs */
i = con->alts;
while (i) {
for (i = con->alts; i; i = i->next) {
/* find our switch */
if (!strcmp(i->name, sw) && !strcmp(i->data, data) &&
(!registrar || !strcmp(i->registrar, registrar))) {
@@ -2685,7 +2648,6 @@ int ast_context_remove_switch2(struct ast_context *con, const char *sw, const ch
return 0;
}
pi = i;
i = i->next;
}
/* we can't find the right switch */
@@ -2705,8 +2667,7 @@ int ast_context_remove_extension(const char *context, const char *extension, int
if (ast_lock_contexts()) return -1;
/* walk contexts ... */
c = ast_walk_contexts(NULL);
while (c) {
for (c = ast_walk_contexts(NULL); c; c = ast_walk_contexts(c)) {
/* ... search for the right one ... */
if (!strcmp(ast_get_context_name(c), context)) {
/* ... remove extension ... */
@@ -2716,7 +2677,6 @@ int ast_context_remove_extension(const char *context, const char *extension, int
ast_unlock_contexts();
return ret;
}
c = ast_walk_contexts(c);
}
/* we can't find the right context */
@@ -2850,30 +2810,31 @@ int ast_register_application(const char *app, int (*execute)(struct ast_channel
ast_log(LOG_ERROR, "Unable to lock application list\n");
return -1;
}
tmp = apps;
while(tmp) {
for (tmp = apps; tmp; tmp = tmp->next) {
if (!strcasecmp(app, tmp->name)) {
ast_log(LOG_WARNING, "Already have an application '%s'\n", app);
ast_mutex_unlock(&applock);
return -1;
}
tmp = tmp->next;
}
tmp = malloc(length);
if (tmp) {
memset(tmp, 0, length);
tmp = calloc(1, length);
if (!tmp) {
ast_log(LOG_ERROR, "Out of memory\n");
ast_mutex_unlock(&applock);
return -1;
}
strcpy(tmp->name, app);
tmp->execute = execute;
tmp->synopsis = synopsis;
tmp->description = description;
/* Store in alphabetical order */
cur = apps;
prev = NULL;
while(cur) {
for (cur = apps; cur; cur = cur->next) {
if (strcasecmp(tmp->name, cur->name) < 0)
break;
prev = cur;
cur = cur->next;
}
if (prev) {
tmp->next = prev->next;
@@ -2882,11 +2843,7 @@ int ast_register_application(const char *app, int (*execute)(struct ast_channel
tmp->next = apps;
apps = tmp;
}
} else {
ast_log(LOG_ERROR, "Out of memory\n");
ast_mutex_unlock(&applock);
return -1;
}
if (option_verbose > 1)
ast_verbose( VERBOSE_PREFIX_2 "Registered application '%s'\n", term_color(tmps, tmp->name, COLOR_BRCYAN, 0, sizeof(tmps)));
ast_mutex_unlock(&applock);
@@ -2900,12 +2857,10 @@ int ast_register_switch(struct ast_switch *sw)
ast_log(LOG_ERROR, "Unable to lock switch lock\n");
return -1;
}
tmp = switches;
while(tmp) {
for (tmp = switches; tmp; tmp = tmp->next) {
if (!strcasecmp(tmp->name, sw->name))
break;
prev = tmp;
tmp = tmp->next;
}
if (tmp) {
ast_mutex_unlock(&switchlock);
@@ -2928,8 +2883,7 @@ void ast_unregister_switch(struct ast_switch *sw)
ast_log(LOG_ERROR, "Unable to lock switch lock\n");
return;
}
tmp = switches;
while(tmp) {
for (tmp = switches; tmp; tmp = tmp->next) {
if (tmp == sw) {
if (prev)
prev->next = tmp->next;
@@ -2939,7 +2893,6 @@ void ast_unregister_switch(struct ast_switch *sw)
break;
}
prev = tmp;
tmp = tmp->next;
}
ast_mutex_unlock(&switchlock);
}
@@ -3005,8 +2958,7 @@ static char *complete_show_application(char *line, char *word,
}
/* ... walk all applications ... */
a = apps;
while (a) {
for (a = apps; a; a = a->next) {
/* ... check if word matches this application ... */
if (!strncasecmp(word, a->name, strlen(word))) {
/* ... if this is right app serve it ... */
@@ -3016,7 +2968,6 @@ static char *complete_show_application(char *line, char *word,
return ret;
}
}
a = a->next;
}
/* no application match */
@@ -3038,8 +2989,7 @@ static int handle_show_application(int fd, int argc, char *argv[])
}
/* ... go through all applications ... */
a = apps;
while (a) {
for (a = apps; a; a = a->next) {
/* ... compare this application name with all arguments given
* to 'show application' command ... */
for (app = 2; app < argc; app++) {
@@ -3087,7 +3037,6 @@ static int handle_show_application(int fd, int argc, char *argv[])
}
}
}
a = a->next;
}
ast_mutex_unlock(&applock);
@@ -3119,8 +3068,7 @@ static int handle_show_hints(int fd, int argc, char *argv[])
ast_log(LOG_ERROR, "Unable to lock hints\n");
return -1;
}
hint = hints;
while (hint) {
for (hint = hints; hint; hint = hint->next) {
watchers = 0;
for (watcher = hint->callbacks; watcher; watcher = watcher->next)
watchers++;
@@ -3128,7 +3076,6 @@ static int handle_show_hints(int fd, int argc, char *argv[])
ast_get_extension_name(hint->exten), ast_get_extension_app(hint->exten),
ast_extension_state2str(hint->laststate), watchers);
num++;
hint = hint->next;
}
ast_cli(fd, "----------------\n");
ast_cli(fd, "- %d hints registered\n", num);
@@ -3150,10 +3097,8 @@ static int handle_show_switches(int fd, int argc, char *argv[])
ast_log(LOG_ERROR, "Unable to lock switches\n");
return -1;
}
sw = switches;
while (sw) {
for (sw = switches; sw; sw = sw->next) {
ast_cli(fd, "%s: %s\n", sw->name, sw->description);
sw = sw->next;
}
ast_mutex_unlock(&switchlock);
return RESULT_SUCCESS;
@@ -3276,9 +3221,11 @@ static char *complete_show_dialplan_context(char *line, char *word, int pos,
{
struct ast_context *c;
int which = 0;
int wordlen;
/* we are do completion of [exten@]context on second position only */
if (pos != 2) return NULL;
if (pos != 2)
return NULL;
/* try to lock contexts list ... */
if (ast_lock_contexts()) {
@@ -3286,11 +3233,12 @@ static char *complete_show_dialplan_context(char *line, char *word, int pos,
return NULL;
}
wordlen = strlen(word);
/* ... walk through all contexts ... */
c = ast_walk_contexts(NULL);
while(c) {
for (c = ast_walk_contexts(NULL); c; c = ast_walk_contexts(c)) {
/* ... word matches context name? yes? ... */
if (!strncasecmp(word, ast_get_context_name(c), strlen(word))) {
if (!strncasecmp(word, ast_get_context_name(c), wordlen)) {
/* ... for serve? ... */
if (++which > state) {
/* ... yes, serve this context name ... */
@@ -3299,7 +3247,6 @@ static char *complete_show_dialplan_context(char *line, char *word, int pos,
return ret;
}
}
c = ast_walk_contexts(c);
}
/* ... unlock and return */
@@ -3593,8 +3540,7 @@ int ast_unregister_application(const char *app)
ast_log(LOG_ERROR, "Unable to lock application list\n");
return -1;
}
tmp = apps;
while(tmp) {
for (tmp = apps; tmp; tmp = tmp->next) {
if (!strcasecmp(app, tmp->name)) {
if (tmpl)
tmpl->next = tmp->next;
@@ -3607,7 +3553,6 @@ int ast_unregister_application(const char *app)
return 0;
}
tmpl = tmp;
tmp = tmp->next;
}
ast_mutex_unlock(&applock);
return -1;
@@ -3625,8 +3570,7 @@ struct ast_context *ast_context_create(struct ast_context **extcontexts, const c
} else
local_contexts = extcontexts;
tmp = *local_contexts;
while(tmp) {
for (tmp = *local_contexts; tmp; tmp = tmp->next) {
if (!strcasecmp(tmp->name, name)) {
ast_mutex_unlock(&conlock);
ast_log(LOG_WARNING, "Tried to register context '%s', already in use\n", name);
@@ -3634,11 +3578,9 @@ struct ast_context *ast_context_create(struct ast_context **extcontexts, const c
ast_mutex_unlock(&conlock);
return NULL;
}
tmp = tmp->next;
}
tmp = malloc(length);
tmp = calloc(1, length);
if (tmp) {
memset(tmp, 0, length);
ast_mutex_init(&tmp->lock);
strcpy(tmp->name, name);
tmp->root = NULL;
@@ -3779,8 +3721,7 @@ int ast_context_add_include(const char *context, const char *include, const char
}
/* walk contexts ... */
c = ast_walk_contexts(NULL);
while (c) {
for (c = ast_walk_contexts(NULL); c; c = ast_walk_contexts(c)) {
/* ... search for the right one ... */
if (!strcmp(ast_get_context_name(c), context)) {
int ret = ast_context_add_include2(c, include, registrar);
@@ -3788,7 +3729,6 @@ int ast_context_add_include(const char *context, const char *include, const char
ast_unlock_contexts();
return ret;
}
c = ast_walk_contexts(c);
}
/* we can't find the right context */
@@ -4147,14 +4087,13 @@ int ast_context_add_include2(struct ast_context *con, const char *value,
length += 2 * (strlen(value) + 1);
/* allocate new include structure ... */
if (!(new_include = malloc(length))) {
if (!(new_include = calloc(1, length))) {
ast_log(LOG_ERROR, "Out of memory\n");
errno = ENOMEM;
return -1;
}
/* ... fill in this structure ... */
memset(new_include, 0, length);
p = new_include->stuff;
new_include->name = p;
strcpy(new_include->name, value);
@@ -4181,8 +4120,7 @@ int ast_context_add_include2(struct ast_context *con, const char *value,
}
/* ... go to last include and check if context is already included too... */
i = con->includes;
while (i) {
for (i = con->includes; i; i = i->next) {
if (!strcasecmp(i->name, new_include->name)) {
free(new_include);
ast_mutex_unlock(&con->lock);
@@ -4190,7 +4128,6 @@ int ast_context_add_include2(struct ast_context *con, const char *value,
return -1;
}
il = i;
i = i->next;
}
/* ... include new context into context list, unlock, return */
@@ -4220,8 +4157,7 @@ int ast_context_add_switch(const char *context, const char *sw, const char *data
}
/* walk contexts ... */
c = ast_walk_contexts(NULL);
while (c) {
for (c = ast_walk_contexts(NULL); c; c = ast_walk_contexts(c)) {
/* ... search for the right one ... */
if (!strcmp(ast_get_context_name(c), context)) {
int ret = ast_context_add_switch2(c, sw, data, eval, registrar);
@@ -4229,7 +4165,6 @@ int ast_context_add_switch(const char *context, const char *sw, const char *data
ast_unlock_contexts();
return ret;
}
c = ast_walk_contexts(c);
}
/* we can't find the right context */
@@ -4265,14 +4200,13 @@ int ast_context_add_switch2(struct ast_context *con, const char *value,
}
/* allocate new sw structure ... */
if (!(new_sw = malloc(length))) {
if (!(new_sw = calloc(1, length))) {
ast_log(LOG_ERROR, "Out of memory\n");
errno = ENOMEM;
return -1;
}
/* ... fill in this structure ... */
memset(new_sw, 0, length);
p = new_sw->stuff;
new_sw->name = p;
strcpy(new_sw->name, value);
@@ -4299,8 +4233,7 @@ int ast_context_add_switch2(struct ast_context *con, const char *value,
}
/* ... go to last sw and check if context is already swd too... */
i = con->alts;
while (i) {
for (i = con->alts; i; i = i->next) {
if (!strcasecmp(i->name, new_sw->name) && !strcasecmp(i->data, new_sw->data)) {
free(new_sw);
ast_mutex_unlock(&con->lock);
@@ -4308,7 +4241,6 @@ int ast_context_add_switch2(struct ast_context *con, const char *value,
return -1;
}
il = i;
i = i->next;
}
/* ... sw new context into context list, unlock, return */
@@ -4336,14 +4268,12 @@ int ast_context_remove_ignorepat(const char *context, const char *ignorepat, con
return -1;
}
c = ast_walk_contexts(NULL);
while (c) {
for (c = ast_walk_contexts(NULL); c; c = ast_walk_contexts(c)) {
if (!strcmp(ast_get_context_name(c), context)) {
int ret = ast_context_remove_ignorepat2(c, ignorepat, registrar);
ast_unlock_contexts();
return ret;
}
c = ast_walk_contexts(c);
}
ast_unlock_contexts();
@@ -4360,8 +4290,7 @@ int ast_context_remove_ignorepat2(struct ast_context *con, const char *ignorepat
return -1;
}
ip = con->ignorepats;
while (ip) {
for (ip = con->ignorepats; ip; ip = ip->next) {
if (!strcmp(ip->pattern, ignorepat) &&
(!registrar || (registrar == ip->registrar))) {
if (ipl) {
@@ -4374,7 +4303,7 @@ int ast_context_remove_ignorepat2(struct ast_context *con, const char *ignorepat
ast_mutex_unlock(&con->lock);
return 0;
}
ipl = ip; ip = ip->next;
ipl = ip;
}
ast_mutex_unlock(&con->lock);
@@ -4395,14 +4324,12 @@ int ast_context_add_ignorepat(const char *con, const char *value, const char *re
return -1;
}
c = ast_walk_contexts(NULL);
while (c) {
for (c = ast_walk_contexts(NULL); c; c = ast_walk_contexts(c)) {
if (!strcmp(ast_get_context_name(c), con)) {
int ret = ast_context_add_ignorepat2(c, value, registrar);
ast_unlock_contexts();
return ret;
}
c = ast_walk_contexts(c);
}
ast_unlock_contexts();
@@ -4416,19 +4343,17 @@ int ast_context_add_ignorepat2(struct ast_context *con, const char *value, const
int length;
length = sizeof(struct ast_ignorepat);
length += strlen(value) + 1;
ignorepat = malloc(length);
ignorepat = calloc(1, length);
if (!ignorepat) {
ast_log(LOG_ERROR, "Out of memory\n");
errno = ENOMEM;
return -1;
}
memset(ignorepat, 0, length);
strcpy(ignorepat->pattern, value);
ignorepat->next = NULL;
ignorepat->registrar = registrar;
ast_mutex_lock(&con->lock);
ignorepatc = con->ignorepats;
while(ignorepatc) {
for (ignorepatc = con->ignorepats; ignorepatc; ignorepatc = ignorepatc->next) {
ignorepatl = ignorepatc;
if (!strcasecmp(ignorepatc->pattern, value)) {
/* Already there */
@@ -4436,7 +4361,6 @@ int ast_context_add_ignorepat2(struct ast_context *con, const char *value, const
errno = EEXIST;
return -1;
}
ignorepatc = ignorepatc->next;
}
if (ignorepatl)
ignorepatl->next = ignorepat;
@@ -4454,11 +4378,9 @@ int ast_ignore_pattern(const char *context, const char *pattern)
con = ast_context_find(context);
if (con) {
pat = con->ignorepats;
while (pat) {
for (pat = con->ignorepats; pat; pat = pat->next) {
if (ast_extension_match(pat->pattern, pattern))
return 1;
pat = pat->next;
}
}
return 0;
@@ -4479,15 +4401,13 @@ int ast_add_extension(const char *context, int replace, const char *extension, i
return -1;
}
c = ast_walk_contexts(NULL);
while (c) {
for (c = ast_walk_contexts(NULL); c; c = ast_walk_contexts(c)) {
if (!strcmp(context, ast_get_context_name(c))) {
int ret = ast_add_extension2(c, replace, extension, priority, label, callerid,
application, data, datad, registrar);
ast_unlock_contexts();
return ret;
}
c = ast_walk_contexts(c);
}
ast_unlock_contexts();
@@ -4661,9 +4581,8 @@ int ast_add_extension2(struct ast_context *con,
/* Be optimistic: Build the extension structure first */
if (datad == NULL)
datad = null_datad;
tmp = malloc(length);
tmp = calloc(1, length);
if (tmp) {
memset(tmp, 0, length);
p = tmp->stuff;
if (label) {
tmp->label = p;
@@ -4703,8 +4622,7 @@ int ast_add_extension2(struct ast_context *con,
errno = EBUSY;
return -1;
}
e = con->root;
while(e) {
for (e = con->root; e; e = e->next) {
/* Make sure patterns are always last! */
if ((e->exten[0] != '_') && (extension[0] == '_'))
res = -1;
@@ -4827,7 +4745,6 @@ int ast_add_extension2(struct ast_context *con,
}
el = e;
e = e->next;
}
/* If we fall all the way through to here, then we need to be on the end. */
if (el)
@@ -5455,7 +5372,7 @@ static int pbx_builtin_setamaflags(struct ast_channel *chan, void *data)
{
/* Copy the AMA Flags as specified */
if (data)
ast_cdr_setamaflags(chan, (char *)data);
ast_cdr_setamaflags(chan, data);
else
ast_cdr_setamaflags(chan, "");
return 0;
@@ -5486,7 +5403,7 @@ static int pbx_builtin_gotoiftime(struct ast_channel *chan, void *data)
return -1;
}
if ((s = ast_strdupa((char *) data))) {
if ((s = ast_strdupa(data))) {
ts = s;
/* Separate the Goto path */