diff --git a/src/include/switch_utils.h b/src/include/switch_utils.h index 1d090b2941..5025ce2114 100644 --- a/src/include/switch_utils.h +++ b/src/include/switch_utils.h @@ -341,6 +341,7 @@ SWITCH_DECLARE(switch_status_t) switch_string_match(const char *string, size_t s SWITCH_DECLARE(size_t) switch_url_encode(const char *url, char *buf, size_t len); SWITCH_DECLARE(char *) switch_url_decode(char *s); SWITCH_DECLARE(switch_bool_t) switch_simple_email(const char *to, const char *from, const char *headers, const char *body, const char *file); +SWITCH_DECLARE(char *) switch_find_end_paren(const char *s, char open, char close); /* malloc or DIE macros */ #ifdef NDEBUG diff --git a/src/switch_utils.c b/src/switch_utils.c index b8d7e7a9e2..47549a68d2 100644 --- a/src/switch_utils.c +++ b/src/switch_utils.c @@ -36,6 +36,33 @@ #include "private/switch_core_pvt.h" +SWITCH_DECLARE(char *) switch_find_end_paren(const char *s, char open, char close) +{ + const char *e = NULL; + int depth = 0; + + while (s && *s && *s == ' ') { + s++; + } + + if (*s == open) { + depth++; + for (e = s + 1; e && *e; e++) { + if (*e == open) { + depth++; + } else if (*e == close) { + depth--; + if (!depth) { + break; + } + } + } + } + + return (char *)e; +} + + SWITCH_DECLARE(switch_size_t) switch_fd_read_line(int fd, char *buf, switch_size_t len) { char c, *p;