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(®exbuf, arg, REG_EXTENDED | REG_NOSUB))) {
- regerror(errcode, ®exbuf, errstr, sizeof(errstr));
- ast_log(LOG_WARNING, "Malformed input %s(%s): %s\n", cmd, data, errstr);
- ret = NULL;
- } else {
- ret = regexec(®exbuf, 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(®exbuf);
} else {
- ast_log(LOG_ERROR, "Out of memory in %s(%s)\n", cmd, data);
+ arg = tmp;
+ }
+
+ if ((errcode = regcomp(®exbuf, arg, REG_EXTENDED | REG_NOSUB))) {
+ regerror(errcode, ®exbuf, errstr, sizeof(errstr));
+ ast_log(LOG_WARNING, "Malformed input %s(%s): %s\n", cmd, data, errstr);
+ } else {
+ if (!regexec(®exbuf, earg ? earg : "", 0, NULL, 0))
+ ast_copy_string(buf, "1", len);
}
+ regfree(®exbuf);
- return ret;
+ return buf;
}
#ifndef BUILTIN_FUNC