aboutsummaryrefslogtreecommitdiffstats
path: root/funcs/func_strings.c
diff options
context:
space:
mode:
Diffstat (limited to 'funcs/func_strings.c')
-rwxr-xr-xfuncs/func_strings.c50
1 files changed, 27 insertions, 23 deletions
diff --git a/funcs/func_strings.c b/funcs/func_strings.c
index 303ca77d7..dced1e1a6 100755
--- a/funcs/func_strings.c
+++ b/funcs/func_strings.c
@@ -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