provide the correct string to evaluate with the given regex, instead of the
authorRussell Bryant <russell@russellbryant.com>
Wed, 12 Oct 2005 01:09:04 +0000 (01:09 +0000)
committerRussell Bryant <russell@russellbryant.com>
Wed, 12 Oct 2005 01:09:04 +0000 (01:09 +0000)
entire string provided as input to the REGEX function..  Also, use the
provided buffer to store the result.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6744 65c4cc65-6c06-0410-ace0-fbb531ad65f3

funcs/func_strings.c

index 303ca77..dced1e1 100755 (executable)
@@ -69,39 +69,43 @@ struct ast_custom_function fieldqty_function = {
 
 static char *builtin_function_regex(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) 
 {
-       char *ret_true = "1", *ret_false = "0", *ret;
        char *arg, *earg, *tmp, errstr[256] = "";
        int errcode;
        regex_t regexbuf;
 
-       ret = ret_false; /* convince me otherwise */
+       ast_copy_string(buf, "0", len);
+       
        tmp = ast_strdupa(data);
-       if (tmp) {
-               /* Regex in quotes */
-               arg = strchr(tmp, '"');
-               if (arg) {
-                       arg++;
-                       earg = strrchr(arg, '"');
-                       if (earg) {
-                               *earg = '\0';
-                       }
-               } else {
-                       arg = tmp;
-               }
+       if (!tmp) {
+               ast_log(LOG_ERROR, "Out of memory in %s(%s)\n", cmd, data);
+               return buf;
+       }
 
-               if ((errcode = regcomp(&regexbuf, arg, REG_EXTENDED | REG_NOSUB))) {
-                       regerror(errcode, &regexbuf, errstr, sizeof(errstr));
-                       ast_log(LOG_WARNING, "Malformed input %s(%s): %s\n", cmd, data, errstr);
-                       ret = NULL;
-               } else {
-                       ret = regexec(&regexbuf, data, 0, NULL, 0) ? ret_false : ret_true;
+       /* Regex in quotes */
+       arg = strchr(tmp, '"');
+       if (arg) {
+               arg++;
+               earg = strrchr(arg, '"');
+               if (earg) {
+                       *earg++ = '\0';
+                       /* Skip over any spaces before the data we are checking */
+                       while (*earg == ' ')
+                               earg++;
                }
-               regfree(&regexbuf);
        } else {
-               ast_log(LOG_ERROR, "Out of memory in %s(%s)\n", cmd, data);
+               arg = tmp;
+       }
+
+       if ((errcode = regcomp(&regexbuf, arg, REG_EXTENDED | REG_NOSUB))) {
+               regerror(errcode, &regexbuf, errstr, sizeof(errstr));
+               ast_log(LOG_WARNING, "Malformed input %s(%s): %s\n", cmd, data, errstr);
+       } else {
+               if (!regexec(&regexbuf, earg ? earg : "", 0, NULL, 0))
+                       ast_copy_string(buf, "1", len); 
        }
+       regfree(&regexbuf);
 
-       return ret;
+       return buf;
 }
 
 #ifndef BUILTIN_FUNC