major dialplan functions update
[asterisk/asterisk.git] / funcs / func_cut.c
index 1df4703..c34b7d7 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Asterisk -- An open source telephony toolkit.
  *
 /*
  * Asterisk -- An open source telephony toolkit.
  *
- * Copyright (c) 2003 Tilghman Lesher.  All rights reserved.
+ * Copyright (c) 2003-2006 Tilghman Lesher.  All rights reserved.
  *
  * Tilghman Lesher <app_cut__v003@the-tilghman.com>
  *
  *
  * Tilghman Lesher <app_cut__v003@the-tilghman.com>
  *
@@ -83,10 +83,8 @@ static int sort_internal(struct ast_channel *chan, char *data, char *buffer, siz
                return ERROR_NOARG;
        }
 
                return ERROR_NOARG;
        }
 
-       strings = ast_strdupa((char *)data);
-       if (!strings) {
+       if (!(strings = ast_strdupa(data)))
                return ERROR_NOMEM;
                return ERROR_NOMEM;
-       }
 
        for (ptrkey = strings; *ptrkey; ptrkey++) {
                if (*ptrkey == '|') {
 
        for (ptrkey = strings; *ptrkey; ptrkey++) {
                if (*ptrkey == '|') {
@@ -142,11 +140,8 @@ static int cut_internal(struct ast_channel *chan, char *data, char *buffer, size
 
        memset(buffer, 0, buflen); 
        
 
        memset(buffer, 0, buflen); 
        
-       parse = ast_strdupa(data);
-       if (!parse) {
-               ast_log(LOG_ERROR, "Out of memory!\n");
+       if (!(parse = ast_strdupa(data)))
                return ERROR_NOMEM;
                return ERROR_NOMEM;
-       }
 
        AST_STANDARD_APP_ARGS(args, parse);
 
 
        AST_STANDARD_APP_ARGS(args, parse);
 
@@ -233,9 +228,10 @@ static int cut_internal(struct ast_channel *chan, char *data, char *buffer, size
        return 0;
 }
 
        return 0;
 }
 
-static char *acf_sort_exec(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
+static int acf_sort_exec(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
 {
        struct localuser *u;
 {
        struct localuser *u;
+       int ret = -1;
 
        LOCAL_USER_ACF_ADD(u);
 
 
        LOCAL_USER_ACF_ADD(u);
 
@@ -247,16 +243,19 @@ static char *acf_sort_exec(struct ast_channel *chan, char *cmd, char *data, char
                ast_log(LOG_ERROR, "Out of memory\n");
                break;
        case 0:
                ast_log(LOG_ERROR, "Out of memory\n");
                break;
        case 0:
+               ret = 0;
                break;
        default:
                ast_log(LOG_ERROR, "Unknown internal error\n");
        }
        LOCAL_USER_REMOVE(u);
                break;
        default:
                ast_log(LOG_ERROR, "Unknown internal error\n");
        }
        LOCAL_USER_REMOVE(u);
-       return buf;
+
+       return ret;
 }
 
 }
 
-static char *acf_cut_exec(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
+static int acf_cut_exec(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
 {
 {
+       int ret = -1;
        struct localuser *u;
 
        LOCAL_USER_ACF_ADD(u);
        struct localuser *u;
 
        LOCAL_USER_ACF_ADD(u);
@@ -272,12 +271,14 @@ static char *acf_cut_exec(struct ast_channel *chan, char *cmd, char *data, char
                ast_log(LOG_ERROR, "Usage: CUT(<varname>,<char-delim>,<range-spec>)\n");
                break;
        case 0:
                ast_log(LOG_ERROR, "Usage: CUT(<varname>,<char-delim>,<range-spec>)\n");
                break;
        case 0:
+               ret = 0;
                break;
        default:
                ast_log(LOG_ERROR, "Unknown internal error\n");
        }
        LOCAL_USER_REMOVE(u);
                break;
        default:
                ast_log(LOG_ERROR, "Unknown internal error\n");
        }
        LOCAL_USER_REMOVE(u);
-       return buf;
+
+       return ret;
 }
 
 struct ast_custom_function acf_sort = {
 }
 
 struct ast_custom_function acf_sort = {
@@ -306,9 +307,9 @@ struct ast_custom_function acf_cut = {
 
 int unload_module(void)
 {
 
 int unload_module(void)
 {
-       int res;
+       int res = 0;
 
 
-       res = ast_custom_function_unregister(&acf_cut);
+       res |= ast_custom_function_unregister(&acf_cut);
        res |= ast_custom_function_unregister(&acf_sort);
 
        STANDARD_HANGUP_LOCALUSERS;
        res |= ast_custom_function_unregister(&acf_sort);
 
        STANDARD_HANGUP_LOCALUSERS;
@@ -318,9 +319,9 @@ int unload_module(void)
 
 int load_module(void)
 {
 
 int load_module(void)
 {
-       int res;
+       int res = 0;
 
 
-       res = ast_custom_function_register(&acf_cut);
+       res |= ast_custom_function_register(&acf_cut);
        res |= ast_custom_function_register(&acf_sort);
 
        return res;
        res |= ast_custom_function_register(&acf_sort);
 
        return res;