diff options
Diffstat (limited to 'bgpd/bgp_regex.c')
| -rw-r--r-- | bgpd/bgp_regex.c | 84 |
1 files changed, 39 insertions, 45 deletions
diff --git a/bgpd/bgp_regex.c b/bgpd/bgp_regex.c index ea87633dc0..315f7384b7 100644 --- a/bgpd/bgp_regex.c +++ b/bgpd/bgp_regex.c @@ -31,65 +31,59 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA #include "bgp_regex.h" /* Character `_' has special mean. It represents [,{}() ] and the - beginning of the line(^) and the end of the line ($). + beginning of the line(^) and the end of the line ($). (^|[,{}() ]|$) */ -regex_t * -bgp_regcomp (const char *regstr) +regex_t *bgp_regcomp(const char *regstr) { - /* Convert _ character to generic regular expression. */ - int i, j; - int len; - int magic = 0; - char *magic_str; - char magic_regexp[] = "(^|[,{}() ]|$)"; - int ret; - regex_t *regex; - - len = strlen (regstr); - for (i = 0; i < len; i++) - if (regstr[i] == '_') - magic++; - - magic_str = XMALLOC (MTYPE_TMP, len + (14 * magic) + 1); - - for (i = 0, j = 0; i < len; i++) - { - if (regstr[i] == '_') - { - memcpy (magic_str + j, magic_regexp, strlen (magic_regexp)); - j += strlen (magic_regexp); + /* Convert _ character to generic regular expression. */ + int i, j; + int len; + int magic = 0; + char *magic_str; + char magic_regexp[] = "(^|[,{}() ]|$)"; + int ret; + regex_t *regex; + + len = strlen(regstr); + for (i = 0; i < len; i++) + if (regstr[i] == '_') + magic++; + + magic_str = XMALLOC(MTYPE_TMP, len + (14 * magic) + 1); + + for (i = 0, j = 0; i < len; i++) { + if (regstr[i] == '_') { + memcpy(magic_str + j, magic_regexp, + strlen(magic_regexp)); + j += strlen(magic_regexp); + } else + magic_str[j++] = regstr[i]; } - else - magic_str[j++] = regstr[i]; - } - magic_str[j] = '\0'; + magic_str[j] = '\0'; - regex = XMALLOC (MTYPE_BGP_REGEXP, sizeof (regex_t)); + regex = XMALLOC(MTYPE_BGP_REGEXP, sizeof(regex_t)); - ret = regcomp (regex, magic_str, REG_EXTENDED|REG_NOSUB); + ret = regcomp(regex, magic_str, REG_EXTENDED | REG_NOSUB); - XFREE (MTYPE_TMP, magic_str); + XFREE(MTYPE_TMP, magic_str); - if (ret != 0) - { - XFREE (MTYPE_BGP_REGEXP, regex); - return NULL; - } + if (ret != 0) { + XFREE(MTYPE_BGP_REGEXP, regex); + return NULL; + } - return regex; + return regex; } -int -bgp_regexec (regex_t *regex, struct aspath *aspath) +int bgp_regexec(regex_t *regex, struct aspath *aspath) { - return regexec (regex, aspath->str, 0, NULL, 0); + return regexec(regex, aspath->str, 0, NULL, 0); } -void -bgp_regex_free (regex_t *regex) +void bgp_regex_free(regex_t *regex) { - regfree (regex); - XFREE (MTYPE_BGP_REGEXP, regex); + regfree(regex); + XFREE(MTYPE_BGP_REGEXP, regex); } |
