dect
/
asterisk
Archived
13
0
Fork 0

add FIELDQTY function to split variable contents and get any desired field (bug #3731)

git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5353 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
kpfleming 2005-04-01 22:03:17 +00:00
parent d40a3ddc77
commit a606c8bd6a
1 changed files with 30 additions and 0 deletions

View File

@ -169,14 +169,44 @@ static int cut_exec(struct ast_channel *chan, void *data)
return res;
}
static char *function_fieldqty(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
{
char *varname, *varval="", workspace[256];
char *delim = ast_strdupa(data);
int fieldcount=0;
if (delim) {
varname = strsep(&delim, "|");
pbx_retrieve_variable(chan, varname, &varval, workspace, sizeof(workspace), NULL);
while (strsep(&varval, delim)) {
fieldcount++;
}
snprintf(buf, len, "%d", fieldcount);
} else {
ast_log(LOG_ERROR, "Out of memory\n");
strncpy(buf, "1", len);
}
return buf;
}
static struct ast_custom_function_obj fieldqty_function = {
.name = "FIELDQTY",
.desc = "Count the fields, with an arbitrary delimiter",
.syntax = "FIELDQTY(<varname>,<delim>)",
.read = function_fieldqty,
.write = NULL,
};
int unload_module(void)
{
STANDARD_HANGUP_LOCALUSERS;
ast_custom_function_unregister(&fieldqty_function);
return ast_unregister_application(app_cut);
}
int load_module(void)
{
ast_custom_function_register(&fieldqty_function);
return ast_register_application(app_cut, cut_exec, cut_synopsis, cut_descrip);
}