Print this page
9083 replace regex implementation with tre

*** 19,30 **** * * CDDL HEADER END */ /* - * Copyright 2014 Garrett D'Amore <garrett@damore.org> - * * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ /* --- 19,28 ----
*** 31,41 **** * Copyright 1989, 1994 by Mortice Kern Systems Inc. * All rights reserved. */ /* ! * Copyright 2017 Nexenta Systems, Inc. */ #ifndef _REGEX_H #define _REGEX_H --- 29,40 ---- * Copyright 1989, 1994 by Mortice Kern Systems Inc. * All rights reserved. */ /* ! * Copyright 2014 Garrett D'Amore <garrett@damore.org> ! * Copyright 2018 Nexenta Systems, Inc. */ #ifndef _REGEX_H #define _REGEX_H
*** 44,54 **** #ifdef __cplusplus extern "C" { #endif ! /* * wchar_t is a built-in type in standard C++ and as such is not * defined here when using standard C++. However, the GNU compiler * fixincludes utility nonetheless creates its own version of this * header for use by gcc and g++. In that version it adds a redundant --- 43,54 ---- #ifdef __cplusplus extern "C" { #endif ! /* XXX is this still needed?!?! */ ! #if 0 /* * wchar_t is a built-in type in standard C++ and as such is not * defined here when using standard C++. However, the GNU compiler * fixincludes utility nonetheless creates its own version of this * header for use by gcc and g++. In that version it adds a redundant
*** 68,160 **** #else typedef long wchar_t; #endif #endif /* !_WCHAR_T */ #endif /* !defined(__cplusplus) ... */ typedef ssize_t regoff_t; /* regcomp flags */ #define REG_BASIC 0x00000 ! #define REG_EXTENDED 0x00001 /* Use Extended Regular Expressions */ ! #define REG_NOSUB 0x00002 /* Don't set subexpression */ ! #define REG_ICASE 0x00004 /* Ignore case in match */ ! #define REG_NEWLINE 0x00008 /* Treat \n as regular character */ ! #define REG_DELIM 0x00010 /* legacy, no effect */ ! #define REG_DEBUG 0x00020 /* legacy, no effect */ ! #define REG_ANCHOR 0x00040 /* legacy, no effect */ ! #define REG_WORDS 0x00080 /* legacy, no effect */ ! #define REG_EGREP 0x01000 /* legacy, no effect */ ! #define REG_DUMP 0x02000 /* internal */ #define REG_PEND 0x04000 /* NULs are ordinary characters */ #define REG_NOSPEC 0x08000 /* no special characters */ - /* internal flags */ - #define REG_MUST 0x00100 /* legacy, no effect */ - /* regexec flags */ ! #define REG_NOTBOL 0x00200 /* string is not BOL */ ! #define REG_NOTEOL 0x00400 /* string has no EOL */ ! #define REG_NOOPT 0x00800 /* legacy, no effect */ ! #define REG_STARTEND 0x10000 /* match whole pattern */ ! #define REG_TRACE 0x20000 /* tracing of execution */ ! #define REG_LARGE 0x40000 /* force large representation */ ! #define REG_BACKR 0x80000 /* force use of backref code */ /* regcomp and regexec return codes */ #define REG_OK 0 /* success (non-standard) */ ! #define REG_NOMATCH 1 /* regexec failed to match */ ! #define REG_ECOLLATE 2 /* invalid collation element ref. */ ! #define REG_EESCAPE 3 /* trailing \ in pattern */ ! #define REG_ENEWLINE 4 /* \n found before end of pattern */ ! #define REG_ENSUB 5 /* more than 9 \( \) pairs (OBS) */ ! #define REG_ESUBREG 6 /* number in \[0-9] invalid */ ! #define REG_EBRACK 7 /* [ ] imbalance */ ! #define REG_EPAREN 8 /* ( ) imbalance */ ! #define REG_EBRACE 9 /* \{ \} imbalance */ ! #define REG_ERANGE 10 /* invalid endpoint in range */ ! #define REG_ESPACE 11 /* no memory for compiled pattern */ ! #define REG_BADRPT 12 /* invalid repetition */ ! #define REG_ECTYPE 13 /* invalid char-class type */ ! #define REG_BADPAT 14 /* syntax error */ ! #define REG_BADBR 15 /* \{ \} contents bad */ ! #define REG_EFATAL 16 /* internal error, not POSIX.2 */ #define REG_ECHAR 17 /* invalid multibyte character */ ! #define REG_STACK 18 /* backtrack stack overflow */ #define REG_ENOSYS 19 /* function not supported (XPG4) */ ! #define REG__LAST 20 /* first unused code */ ! #define REG_EBOL 21 /* ^ anchor and not BOL */ ! #define REG_EEOL 22 /* $ anchor and not EOL */ ! #define REG_ATOI 255 /* convert name to number (!) */ ! #define REG_ITOA 256 /* convert number to name (!) */ #define _REG_BACKREF_MAX 9 /* Max # of subexp. backreference */ typedef struct { /* regcomp() data saved for regexec() */ size_t re_nsub; /* # of subexpressions in RE pattern */ /* ! * Internal use only. Note that any changes to this structure ! * have to preserve sizing, as it is baked into applications. */ ! struct re_guts *re_g; ! int re_magic; ! const char *re_endp; ! ! /* here for compat */ ! size_t re_len; /* # wchar_t chars in compiled pattern */ ! struct _regex_ext_t *re_sc; /* for binary compatibility */ } regex_t; /* subexpression positions */ typedef struct { const char *rm_sp, *rm_ep; /* Start pointer, end pointer */ regoff_t rm_so, rm_eo; /* Start offset, end offset */ int rm_ss, rm_es; /* Used internally */ } regmatch_t; - /* * IEEE Std 1003.2 ("POSIX.2") regular expressions API. */ extern int regcomp(regex_t *_RESTRICT_KYWD, const char *_RESTRICT_KYWD, int); --- 68,163 ---- #else typedef long wchar_t; #endif #endif /* !_WCHAR_T */ #endif /* !defined(__cplusplus) ... */ + #endif typedef ssize_t regoff_t; /* regcomp flags */ #define REG_BASIC 0x00000 ! #define REG_EXTENDED 0x00001 /* use EREs (POSIX) */ ! #define REG_NOSUB 0x00002 /* don't set subexpression (POSIX) */ ! #define REG_ICASE 0x00004 /* ignore case in match (POSIX) */ ! #define REG_NEWLINE 0x00008 /* treat \n as regular char (POSIX) */ ! /* was REG_DELIM 0x00010 */ ! /* was REG_DEBUG 0x00020 */ ! /* was REG_ANCHOR 0x00040 */ ! /* was REG_WORDS 0x00080 */ ! /* was REG_EGREP 0x01000 */ ! /* was REG_DUMP 0x02000 */ #define REG_PEND 0x04000 /* NULs are ordinary characters */ #define REG_NOSPEC 0x08000 /* no special characters */ + #define REG_LITERAL 0x08000 /* no special characters */ /* regexec flags */ ! /* was REG_MUST 0x00100 */ ! #define REG_NOTBOL 0x00200 /* string is not BOL (POSIX) */ ! #define REG_NOTEOL 0x00400 /* string has no EOL (POSIX) */ ! /* was REG_NOOPT 0x00800 */ ! #define REG_STARTEND 0x10000 /* match whole pattern (BSD) */ /* regcomp and regexec return codes */ #define REG_OK 0 /* success (non-standard) */ ! #define REG_NOMATCH 1 /* regexec failed to match (POSIX) */ ! #define REG_ECOLLATE 2 /* invalid coll. element ref. (POSIX) */ ! #define REG_EESCAPE 3 /* trailing \ in pattern (POSIX) */ ! /* was REG_ENEWLINE 4 */ ! /* was REG_ENSUB 5 */ ! #define REG_ESUBREG 6 /* number in \[0-9] invalid (POSIX) */ ! #define REG_EBRACK 7 /* [ ] imbalance (POSIX) */ ! #define REG_EPAREN 8 /* ( ) imbalance (POSIX) */ ! #define REG_EBRACE 9 /* \{ \} imbalance (POSIX) */ ! #define REG_ERANGE 10 /* invalid endpoint in range (POSIX) */ ! #define REG_ESPACE 11 /* out of memory (POSIX) */ ! #define REG_BADRPT 12 /* invalid repetition (POSIX) */ ! #define REG_ECTYPE 13 /* invalid char-class type (POSIX) */ ! #define REG_BADPAT 14 /* syntax error (POSIX) */ ! #define REG_BADBR 15 /* \{ \} contents bad (POSIX) */ ! /* was REG_EFATAL 16 */ #define REG_ECHAR 17 /* invalid multibyte character */ ! #define REG_ILLSEQ 17 /* invalid multibyte character (BSD) */ ! /* was REG_STACK 18 */ ! /* REG_ENOSYS was removed in XPG7 */ ! #if defined(_STRICT_SYMBOLS) && !defined(_XPG7) #define REG_ENOSYS 19 /* function not supported (XPG4) */ ! #endif ! /* was REG__LAST 20 */ ! /* was REG_EBOL 21 */ ! /* was REG_EEOL 22 */ ! #define REG_EMPTY 23 /* empty (sub)expression */ ! #define REG_INVARG 24 /* invalid argument */ #define _REG_BACKREF_MAX 9 /* Max # of subexp. backreference */ + /* + * Note that any changes to this structure have to preserve sizing, + * as it is baked into applications. Size needs to stay 24/48 bytes + * for 32/64 bit libc, respectively. + */ typedef struct { /* regcomp() data saved for regexec() */ size_t re_nsub; /* # of subexpressions in RE pattern */ + void *value; /* internal use only */ + int re_magic; + const void *re_endp; /* ! * These are here for binary compatibility (see the note about ! * sizing above). */ ! size_t __pad1; ! void *__pad2; } regex_t; /* subexpression positions */ typedef struct { const char *rm_sp, *rm_ep; /* Start pointer, end pointer */ regoff_t rm_so, rm_eo; /* Start offset, end offset */ int rm_ss, rm_es; /* Used internally */ } regmatch_t; /* * IEEE Std 1003.2 ("POSIX.2") regular expressions API. */ extern int regcomp(regex_t *_RESTRICT_KYWD, const char *_RESTRICT_KYWD, int);