mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-04-28 15:36:25 +00:00
lib: Add PCRE2 support
Some results: ``` ==== PCRE ==== % ./a.out "^65001" "65001" comparing: ^65001 / 65001 ret status: 0 [14:31] donatas-pc donatas /home/donatas % ./a.out "^65001_" "65001" comparing: ^65001_ / 65001 ret status: 0 ===== PCRE2 ===== % ./a.out "^65001" "65001" comparing: ^65001 / 65001 ret status: 0 [14:30] donatas-pc donatas /home/donatas % ./a.out "^65001_" "65001" comparing: ^65001_ / 65001 ret status: 1 ``` Seems that if using PCRE2, we need to escape outer `()` chars and `|`. Sounds like a bug. But this is only with some older PCRE2 versions. With >= 10.36, I wasn't able to reproduce this, everything is fine and working as expected. Adding _FRR_PCRE2_POSIX definition because pcre2posix.h does not have include's guard. Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
This commit is contained in:
parent
54757dc179
commit
061f5d1cb4
@ -18,19 +18,24 @@
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef _QUAGGA_BGP_REGEX_H
|
||||
#define _QUAGGA_BGP_REGEX_H
|
||||
#ifndef _FRR_BGP_REGEX_H
|
||||
#define _FRR_BGP_REGEX_H
|
||||
|
||||
#include <zebra.h>
|
||||
|
||||
#ifdef HAVE_LIBPCREPOSIX
|
||||
#ifdef HAVE_LIBPCRE2_POSIX
|
||||
#ifndef _FRR_PCRE2_POSIX
|
||||
#define _FRR_PCRE2_POSIX
|
||||
#include <pcre2posix.h>
|
||||
#endif /* _FRR_PCRE2_POSIX */
|
||||
#elif defined(HAVE_LIBPCREPOSIX)
|
||||
#include <pcreposix.h>
|
||||
#else
|
||||
#include <regex.h>
|
||||
#endif /* HAVE_LIBPCREPOSIX */
|
||||
#endif /* HAVE_LIBPCRE2_POSIX */
|
||||
|
||||
extern void bgp_regex_free(regex_t *regex);
|
||||
extern regex_t *bgp_regcomp(const char *str);
|
||||
extern int bgp_regexec(regex_t *regex, struct aspath *aspath);
|
||||
|
||||
#endif /* _QUAGGA_BGP_REGEX_H */
|
||||
#endif /* _FRR_BGP_REGEX_H */
|
||||
|
@ -30,11 +30,16 @@
|
||||
#include "log.h"
|
||||
#include "frrlua.h"
|
||||
#include "frrscript.h"
|
||||
#ifdef HAVE_LIBPCREPOSIX
|
||||
#ifdef HAVE_LIBPCRE2_POSIX
|
||||
#ifndef _FRR_PCRE2_POSIX
|
||||
#define _FRR_PCRE2_POSIX
|
||||
#include <pcre2posix.h>
|
||||
#endif /* _FRR_PCRE2_POSIX */
|
||||
#elif defined(HAVE_LIBPCREPOSIX)
|
||||
#include <pcreposix.h>
|
||||
#else
|
||||
#include <regex.h>
|
||||
#endif /* HAVE_LIBPCREPOSIX */
|
||||
#endif /* HAVE_LIBPCRE2_POSIX */
|
||||
#include "buffer.h"
|
||||
#include "sockunion.h"
|
||||
#include "hash.h"
|
||||
|
12
configure.ac
12
configure.ac
@ -712,6 +712,8 @@ AC_ARG_ENABLE([cpu-time],
|
||||
AS_HELP_STRING([--disable-cpu-time], [disable cpu usage data gathering]))
|
||||
AC_ARG_ENABLE([pcreposix],
|
||||
AS_HELP_STRING([--enable-pcreposix], [enable using PCRE Posix libs for regex functions]))
|
||||
AC_ARG_ENABLE([pcre2posix],
|
||||
AS_HELP_STRING([--enable-pcre2posix], [enable using PCRE2 Posix libs for regex functions]))
|
||||
AC_ARG_ENABLE([fpm],
|
||||
AS_HELP_STRING([--enable-fpm], [enable Forwarding Plane Manager support]))
|
||||
AC_ARG_ENABLE([werror],
|
||||
@ -1659,6 +1661,16 @@ if test "$enable_pcreposix" = "yes"; then
|
||||
fi
|
||||
AC_SUBST([HAVE_LIBPCREPOSIX])
|
||||
|
||||
dnl ---------------------------
|
||||
dnl check system has PCRE2 regexp
|
||||
dnl ---------------------------
|
||||
if test "$enable_pcre2posix" = "yes"; then
|
||||
AC_CHECK_LIB([pcre2-posix], [regexec], [], [
|
||||
AC_MSG_ERROR([--enable-pcre2posix given but unable to find libpcre2-posix])
|
||||
])
|
||||
fi
|
||||
AC_SUBST([HAVE_LIBPCRE2_POSIX])
|
||||
|
||||
dnl ##########################################################################
|
||||
dnl test "$enable_clippy_only" != "yes"
|
||||
fi
|
||||
|
@ -368,6 +368,13 @@ options from the list below.
|
||||
|
||||
Turn on the usage of PCRE Posix libs for regex functionality.
|
||||
|
||||
.. option:: --enable-pcre2posix
|
||||
|
||||
Turn on the usage of PCRE2 Posix libs for regex functionality.
|
||||
|
||||
PCRE2 versions <= 10.31 work a bit differently. We suggest using at least
|
||||
>= 10.36.
|
||||
|
||||
.. option:: --enable-rpath
|
||||
|
||||
Set hardcoded rpaths in the executable [default=yes].
|
||||
|
@ -23,11 +23,16 @@
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include <sys/types.h>
|
||||
#ifdef HAVE_LIBPCREPOSIX
|
||||
#ifdef HAVE_LIBPCRE2_POSIX
|
||||
#ifndef _FRR_PCRE2_POSIX
|
||||
#define _FRR_PCRE2_POSIX
|
||||
#include <pcre2posix.h>
|
||||
#endif /* _FRR_PCRE2_POSIX */
|
||||
#elif defined(HAVE_LIBPCREPOSIX)
|
||||
#include <pcreposix.h>
|
||||
#else
|
||||
#include <regex.h>
|
||||
#endif /* HAVE_LIBPCREPOSIX */
|
||||
#endif /* HAVE_LIBPCRE2_POSIX */
|
||||
|
||||
#include "frrstr.h"
|
||||
#include "memory.h"
|
||||
|
@ -23,11 +23,16 @@
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/types.h>
|
||||
#ifdef HAVE_LIBPCREPOSIX
|
||||
#ifdef HAVE_LIBPCRE2_POSIX
|
||||
#ifndef _FRR_PCRE2_POSIX
|
||||
#define _FRR_PCRE2_POSIX
|
||||
#include <pcre2posix.h>
|
||||
#endif /* _FRR_PCRE2_POSIX */
|
||||
#elif defined(HAVE_LIBPCREPOSIX)
|
||||
#include <pcreposix.h>
|
||||
#else
|
||||
#include <regex.h>
|
||||
#endif /* HAVE_LIBPCREPOSIX */
|
||||
#endif /* HAVE_LIBPCRE2_POSIX */
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "vector.h"
|
||||
|
@ -24,11 +24,16 @@
|
||||
#include <lib/version.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/types.h>
|
||||
#ifdef HAVE_LIBPCREPOSIX
|
||||
#ifdef HAVE_LIBPCRE2_POSIX
|
||||
#ifndef _FRR_PCRE2_POSIX
|
||||
#define _FRR_PCRE2_POSIX
|
||||
#include <pcre2posix.h>
|
||||
#endif /* _FRR_PCRE2_POSIX */
|
||||
#elif defined(HAVE_LIBPCREPOSIX)
|
||||
#include <pcreposix.h>
|
||||
#else
|
||||
#include <regex.h>
|
||||
#endif /* HAVE_LIBPCREPOSIX */
|
||||
#endif /* HAVE_LIBPCRE2_POSIX */
|
||||
#include <stdio.h>
|
||||
|
||||
#include "linklist.h"
|
||||
|
@ -22,11 +22,16 @@
|
||||
#define _ZEBRA_VTY_H
|
||||
|
||||
#include <sys/types.h>
|
||||
#ifdef HAVE_LIBPCREPOSIX
|
||||
#ifdef HAVE_LIBPCRE2_POSIX
|
||||
#ifndef _FRR_PCRE2_POSIX
|
||||
#define _FRR_PCRE2_POSIX
|
||||
#include <pcre2posix.h>
|
||||
#endif /* _FRR_PCRE2_POSIX */
|
||||
#elif defined(HAVE_LIBPCREPOSIX)
|
||||
#include <pcreposix.h>
|
||||
#else
|
||||
#include <regex.h>
|
||||
#endif /* HAVE_LIBPCREPOSIX */
|
||||
#endif /* HAVE_LIBPCRE2_POSIX */
|
||||
|
||||
#include "thread.h"
|
||||
#include "log.h"
|
||||
|
Loading…
Reference in New Issue
Block a user