LCOV - code coverage report
Current view: top level - bgpd - bgp_regex.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 27 0.0 %
Date: 2015-11-19 Functions: 0 3 0.0 %

          Line data    Source code
       1             : /* AS regular expression routine
       2             :    Copyright (C) 1999 Kunihiro Ishiguro
       3             : 
       4             : This file is part of GNU Zebra.
       5             : 
       6             : GNU Zebra is free software; you can redistribute it and/or modify it
       7             : under the terms of the GNU General Public License as published by the
       8             : Free Software Foundation; either version 2, or (at your option) any
       9             : later version.
      10             : 
      11             : GNU Zebra is distributed in the hope that it will be useful, but
      12             : WITHOUT ANY WARRANTY; without even the implied warranty of
      13             : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      14             : General Public License for more details.
      15             : 
      16             : You should have received a copy of the GNU General Public License
      17             : along with GNU Zebra; see the file COPYING.  If not, write to the Free
      18             : Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
      19             : 02111-1307, USA.  */
      20             : 
      21             : #include <zebra.h>
      22             : 
      23             : #include "log.h"
      24             : #include "command.h"
      25             : #include "memory.h"
      26             : 
      27             : #include "bgpd.h"
      28             : #include "bgp_aspath.h"
      29             : #include "bgp_regex.h"
      30             : 
      31             : /* Character `_' has special mean.  It represents [,{}() ] and the
      32             :    beginning of the line(^) and the end of the line ($).  
      33             : 
      34             :    (^|[,{}() ]|$) */
      35             : 
      36             : regex_t *
      37           0 : bgp_regcomp (const char *regstr)
      38             : {
      39             :   /* Convert _ character to generic regular expression. */
      40             :   int i, j;
      41             :   int len;
      42           0 :   int magic = 0;
      43             :   char *magic_str;
      44           0 :   char magic_regexp[] = "(^|[,{}() ]|$)";
      45             :   int ret;
      46             :   regex_t *regex;
      47             : 
      48           0 :   len = strlen (regstr);
      49           0 :   for (i = 0; i < len; i++)
      50           0 :     if (regstr[i] == '_')
      51           0 :       magic++;
      52             : 
      53           0 :   magic_str = XMALLOC (MTYPE_TMP, len + (14 * magic) + 1);
      54             :   
      55           0 :   for (i = 0, j = 0; i < len; i++)
      56             :     {
      57           0 :       if (regstr[i] == '_')
      58             :         {
      59           0 :           memcpy (magic_str + j, magic_regexp, strlen (magic_regexp));
      60           0 :           j += strlen (magic_regexp);
      61             :         }
      62             :       else
      63           0 :         magic_str[j++] = regstr[i];
      64             :     }
      65           0 :   magic_str[j] = '\0';
      66             : 
      67           0 :   regex = XMALLOC (MTYPE_BGP_REGEXP, sizeof (regex_t));
      68             : 
      69           0 :   ret = regcomp (regex, magic_str, REG_EXTENDED|REG_NOSUB);
      70             : 
      71           0 :   XFREE (MTYPE_TMP, magic_str);
      72             : 
      73           0 :   if (ret != 0)
      74             :     {
      75           0 :       XFREE (MTYPE_BGP_REGEXP, regex);
      76           0 :       return NULL;
      77             :     }
      78             : 
      79           0 :   return regex;
      80             : }
      81             : 
      82             : int
      83           0 : bgp_regexec (regex_t *regex, struct aspath *aspath)
      84             : {
      85           0 :   return regexec (regex, aspath->str, 0, NULL, 0);
      86             : }
      87             : 
      88             : void
      89           0 : bgp_regex_free (regex_t *regex)
      90             : {
      91           0 :   regfree (regex);
      92           0 :   XFREE (MTYPE_BGP_REGEXP, regex);
      93           0 : }

Generated by: LCOV version 1.10