static void sorcery_realtime_retrieve_regex(const struct ast_sorcery *sorcery, void *data, const char *type, struct ao2_container *objects, const char *regex)
{
- char field[strlen(UUID_FIELD) + 6], value[strlen(regex) + 2];
+ char field[strlen(UUID_FIELD) + 6], value[strlen(regex) + 3];
RAII_VAR(struct ast_variable *, fields, NULL, ast_variables_destroy);
/* The realtime API provides no direct ability to do regex so for now we support a limited subset using pattern matching */
- if (regex[0] != '^') {
- return;
- }
-
snprintf(field, sizeof(field), "%s LIKE", UUID_FIELD);
- snprintf(value, sizeof(value), "%s%%", regex + 1);
+ snprintf(value, sizeof(value), "%%%s%%", regex);
if (!(fields = ast_variable_new(field, value, ""))) {
return;
/* If we are doing a pattern matching we need to remove the LIKE from the name */
if ((like = strstr(name, " LIKE"))) {
- char *pattern, *field_value = ast_strdupa(field->value);
+ char *field_value = ast_strdupa(field->value);
*like = '\0';
value = ast_strdupa(ast_variable_retrieve(realtime_objects, object_id, name));
- if (!(pattern = strchr(field_value, '%'))) {
- return 0;
- }
-
- *pattern = '\0';
+ field_value = ast_strip_quoted(field_value, "%", "%");
if (strncmp(value, field_value, strlen(field_value))) {
return 0;
return AST_TEST_FAIL;
}
- if (!(objects = ast_sorcery_retrieve_by_regex(sorcery, "test", "^blah-"))) {
+ if (!(objects = ast_sorcery_retrieve_by_regex(sorcery, "test", "blah-"))) {
ast_test_status_update(test, "Failed to retrieve a container of objects\n");
return AST_TEST_FAIL;
} else if (ao2_container_count(objects) != 2) {