From 565398f5e81404447faa764c4467a8fb1d277692 Mon Sep 17 00:00:00 2001 From: "Kevin P. Fleming" Date: Fri, 1 Apr 2005 22:03:17 +0000 Subject: add FIELDQTY function to split variable contents and get any desired field (bug #3731) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5353 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/app_cut.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'apps') diff --git a/apps/app_cut.c b/apps/app_cut.c index da397f66e..6bcc9be20 100755 --- a/apps/app_cut.c +++ b/apps/app_cut.c @@ -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(,)", + .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); } -- cgit v1.2.3