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 3674a9b6d3..606568402a 100644 --- a/bgpd/bgp_regex.c +++ b/bgpd/bgp_regex.c @@ -31,65 +31,59 @@  #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);  }  | 
