From 565398f5e81404447faa764c4467a8fb1d277692 Mon Sep 17 00:00:00 2001
From: "Kevin P. Fleming" <kpfleming@digium.com>
Date: Fri, 1 Apr 2005 22:03:17 +0000
Subject: [PATCH] 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(+)

diff --git a/apps/app_cut.c b/apps/app_cut.c
index da397f66ee..6bcc9be200 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(<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);
 }
 
-- 
GitLab