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);