[svn-commits] trunk - r7989 in /trunk/funcs: func_cdr.c func_cut.c

svn-commits at lists.digium.com svn-commits at lists.digium.com
Wed Jan 11 13:52:30 CST 2006


Author: mogorman
Date: Wed Jan 11 13:52:29 2006
New Revision: 7989

URL: http://svn.digium.com/view/asterisk?rev=7989&view=rev
Log:
Added macros from 6198 and 6203.  also added better
error reporting in func_cut

Modified:
    trunk/funcs/func_cdr.c
    trunk/funcs/func_cut.c

Modified: trunk/funcs/func_cdr.c
URL: http://svn.digium.com/view/asterisk/trunk/funcs/func_cdr.c?rev=7989&r1=7988&r2=7989&view=diff
==============================================================================
--- trunk/funcs/func_cdr.c (original)
+++ trunk/funcs/func_cdr.c Wed Jan 11 13:52:29 2006
@@ -38,13 +38,24 @@
 #include "asterisk/app.h"
 #include "asterisk/cdr.h"
 
+enum {
+	OPT_RECURSIVE = (1 << 0),
+} cdr_option_flags;
+
+AST_APP_OPTIONS(cdr_func_options, {
+	AST_APP_OPTION('r', OPT_RECURSIVE),
+});
+
 static char *builtin_function_cdr_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) 
 {
 	char *ret;
-	char *mydata;
-	int argc;
-	char *argv[2];
-	int recursive = 0;
+	char *parse;
+	struct ast_flags flags = {0};
+	
+	AST_DECLARE_APP_ARGS(args,
+		AST_APP_ARG(variable);
+		AST_APP_ARG(options);
+	);
 
 	if (ast_strlen_zero(data))
 		return NULL;
@@ -52,47 +63,54 @@
 	if (!chan->cdr)
 		return NULL;
 
-	mydata = ast_strdupa(data);
-	argc = ast_app_separate_args(mydata, '|', argv, sizeof(argv) / sizeof(argv[0]));
-
-	/* check for a trailing flags argument */
-	if (argc > 1) {
-		argc--;
-		if (strchr(argv[argc], 'r'))
-			recursive = 1;
+	parse = ast_strdupa(data);
+	if (!parse) {
+		ast_log(LOG_ERROR, "Out of memory!\n");
+		return NULL;
 	}
 
-	ast_cdr_getvar(chan->cdr, argv[0], &ret, buf, len, recursive);
+	AST_STANDARD_APP_ARGS(args, parse);
+	
+	if(!ast_strlen_zero(args.options) ) {
+		ast_app_parse_options(cdr_func_options, &flags, NULL, args.options);
+	}
+	ast_cdr_getvar(chan->cdr, args.variable, &ret, buf, len, (ast_test_flag(&flags,OPT_RECURSIVE) ) ? 1 : 0 );
 
 	return ret;
 }
 
 static void builtin_function_cdr_write(struct ast_channel *chan, char *cmd, char *data, const char *value) 
 {
-	char *mydata;
-	int argc;
-	char *argv[2];
-	int recursive = 0;
+	char *parse;
+	struct ast_flags flags = {0};
+
+	AST_DECLARE_APP_ARGS(args, 
+		AST_APP_ARG(variable);
+		AST_APP_ARG(options);
+	);      
 
 	if (ast_strlen_zero(data) || !value)
 		return;
 	
-	mydata = ast_strdupa(data);
-	argc = ast_app_separate_args(mydata, '|', argv, sizeof(argv) / sizeof(argv[0]));
+	parse = ast_strdupa(data);
+	if (!parse) {
+		ast_log(LOG_ERROR, "Out of memory!\n");
+		return;
+	}
+
+	AST_STANDARD_APP_ARGS(args, parse);
 
 	/* check for a trailing flags argument */
-	if (argc > 1) {
-		argc--;
-		if (strchr(argv[argc], 'r'))
-			recursive = 1;
+	if(!ast_strlen_zero(args.options) ) {
+		ast_app_parse_options(cdr_func_options, &flags, NULL, args.options);
 	}
 
-	if (!strcasecmp(argv[0], "accountcode"))
+	if (!strcasecmp(args.variable, "accountcode"))
 		ast_cdr_setaccount(chan, value);
-	else if (!strcasecmp(argv[0], "userfield"))
+	else if (!strcasecmp(args.variable, "userfield"))
 		ast_cdr_setuserfield(chan, value);
 	else if (chan->cdr)
-		ast_cdr_setvar(chan->cdr, argv[0], value, recursive);
+		ast_cdr_setvar(chan->cdr, args.variable, value, (ast_test_flag(&flags,OPT_RECURSIVE) ) ? 1 : 0 );
 }
 
 #ifndef BUILTIN_FUNC

Modified: trunk/funcs/func_cut.c
URL: http://svn.digium.com/view/asterisk/trunk/funcs/func_cut.c?rev=7989&r1=7988&r2=7989&view=diff
==============================================================================
--- trunk/funcs/func_cut.c (original)
+++ trunk/funcs/func_cut.c Wed Jan 11 13:52:29 2006
@@ -133,42 +133,40 @@
 
 static int cut_internal(struct ast_channel *chan, char *data, char *buffer, size_t buflen)
 {
-	char *s, *args[3], *varname=NULL, *delimiter=NULL, *field=NULL;
-	int args_okay = 0;
-
-	memset(buffer, 0, buflen);
+	char *parse;
+	AST_DECLARE_APP_ARGS(args,
+		AST_APP_ARG(varname);
+		AST_APP_ARG(delimiter);
+		AST_APP_ARG(field);
+	);
+
+	memset(buffer, 0, buflen); 
+	
+	parse = ast_strdupa(data);
+	if (!parse) {
+		ast_log(LOG_ERROR, "Out of memory!\n");
+		return ERROR_NOMEM;
+	}
+
+	AST_STANDARD_APP_ARGS(args, parse);
 
 	/* Check and parse arguments */
-	if (data) {
-		s = ast_strdupa((char *)data);
-		if (s) {
-			ast_app_separate_args(s, '|', args, 3);
-			varname = args[0];
-			delimiter = args[1];
-			field = args[2];
-
-			if (field) {
-				args_okay = 1;
-			}
-		} else {
-			return ERROR_NOMEM;
-		}
-	}
-
-	if (args_okay) {
+	if(args.argc < 3){
+		return ERROR_NOARG;
+	} else {
 		char d, ds[2];
-		char *tmp = alloca(strlen(varname) + 4);
+		char *tmp = alloca(strlen(args.varname) + 4);
 		char varvalue[MAXRESULT], *tmp2=varvalue;
 
 		if (tmp) {
-			snprintf(tmp, strlen(varname) + 4, "${%s}", varname);
+			snprintf(tmp, strlen(args.varname) + 4, "${%s}", args.varname);
 			memset(varvalue, 0, sizeof(varvalue));
 		} else {
 			return ERROR_NOMEM;
 		}
 
-		if (delimiter[0])
-			d = delimiter[0];
+		if (args.delimiter[0])
+			d = args.delimiter[0];
 		else
 			d = '-';
 
@@ -179,8 +177,8 @@
 
 		if (tmp2) {
 			int curfieldnum = 1;
-			while ((tmp2 != NULL) && (field != NULL)) {
-				char *nextgroup = strsep(&field, "&");
+			while ((tmp2 != NULL) && (args.field != NULL)) {
+				char *nextgroup = strsep(&(args.field), "&");
 				int num1 = 0, num2 = MAXRESULT;
 				char trashchar;
 
@@ -231,8 +229,6 @@
 				}
 			}
 		}
-	} else {
-		return ERROR_NOARG;
 	}
 	return 0;
 }
@@ -267,7 +263,7 @@
 
 	switch (cut_internal(chan, data, buf, len)) {
 	case ERROR_NOARG:
-		ast_log(LOG_ERROR, "CUT() requires an argument\n");
+		ast_log(LOG_ERROR, "Syntax: CUT(<varname>,<char-delim>,<range-spec>) - missing argument!\n");
 		break;
 	case ERROR_NOMEM:
 		ast_log(LOG_ERROR, "Out of memory\n");



More information about the svn-commits mailing list