Print this page
9083 replace regex implementation with tre

Split Close
Expand all
Collapse all
          --- old/usr/src/head/regex.h
          +++ new/usr/src/head/regex.h
↓ open down ↓ 13 lines elided ↑ open up ↑
  14   14   * When distributing Covered Code, include this CDDL HEADER in each
  15   15   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  16   16   * If applicable, add the following below this CDDL HEADER, with the
  17   17   * fields enclosed by brackets "[]" replaced with your own identifying
  18   18   * information: Portions Copyright [yyyy] [name of copyright owner]
  19   19   *
  20   20   * CDDL HEADER END
  21   21   */
  22   22  
  23   23  /*
  24      - * Copyright 2014 Garrett D'Amore <garrett@damore.org>
  25      - *
  26   24   * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
  27   25   * Use is subject to license terms.
  28   26   */
  29   27  
  30   28  /*
  31   29   * Copyright 1989, 1994 by Mortice Kern Systems Inc.
  32   30   * All rights reserved.
  33   31   */
  34   32  
  35   33  /*
  36      - * Copyright 2017 Nexenta Systems, Inc.
       34 + * Copyright 2014 Garrett D'Amore <garrett@damore.org>
       35 + * Copyright 2018 Nexenta Systems, Inc.
  37   36   */
  38   37  
  39   38  #ifndef _REGEX_H
  40   39  #define _REGEX_H
  41   40  
  42   41  #include <sys/feature_tests.h>
  43   42  #include <sys/types.h>
  44   43  
  45   44  #ifdef  __cplusplus
  46   45  extern "C" {
  47   46  #endif
  48   47  
  49      -
       48 +/* XXX is this still needed?!?! */
       49 +#if 0
  50   50  /*
  51   51   * wchar_t is a built-in type in standard C++ and as such is not
  52   52   * defined here when using standard C++. However, the GNU compiler
  53   53   * fixincludes utility nonetheless creates its own version of this
  54   54   * header for use by gcc and g++. In that version it adds a redundant
  55   55   * guard for __cplusplus. To avoid the creation of a gcc/g++ specific
  56   56   * header we need to include the following magic comment:
  57   57   *
  58   58   * we must use the C++ compiler's type
  59   59   *
↓ open down ↓ 3 lines elided ↑ open up ↑
  63   63  #if !defined(__cplusplus) || (__cplusplus < 199711L && !defined(__GNUG__))
  64   64  #ifndef _WCHAR_T
  65   65  #define _WCHAR_T
  66   66  #if defined(_LP64)
  67   67  typedef int     wchar_t;
  68   68  #else
  69   69  typedef long    wchar_t;
  70   70  #endif
  71   71  #endif  /* !_WCHAR_T */
  72   72  #endif  /* !defined(__cplusplus) ... */
       73 +#endif
  73   74  
  74   75  typedef ssize_t regoff_t;
  75   76  
  76   77  /* regcomp flags */
  77   78  #define REG_BASIC       0x00000
  78      -#define REG_EXTENDED    0x00001         /* Use Extended Regular Expressions */
  79      -#define REG_NOSUB       0x00002         /* Don't set subexpression */
  80      -#define REG_ICASE       0x00004         /* Ignore case in match */
  81      -#define REG_NEWLINE     0x00008         /* Treat \n as regular character */
  82      -#define REG_DELIM       0x00010         /* legacy, no effect */
  83      -#define REG_DEBUG       0x00020         /* legacy, no effect */
  84      -#define REG_ANCHOR      0x00040         /* legacy, no effect */
  85      -#define REG_WORDS       0x00080         /* legacy, no effect */
  86      -#define REG_EGREP       0x01000         /* legacy, no effect */
  87      -#define REG_DUMP        0x02000         /* internal */
       79 +#define REG_EXTENDED    0x00001         /* use EREs (POSIX) */
       80 +#define REG_NOSUB       0x00002         /* don't set subexpression (POSIX) */
       81 +#define REG_ICASE       0x00004         /* ignore case in match (POSIX) */
       82 +#define REG_NEWLINE     0x00008         /* treat \n as regular char (POSIX) */
       83 +/* was  REG_DELIM       0x00010 */
       84 +/* was  REG_DEBUG       0x00020 */
       85 +/* was  REG_ANCHOR      0x00040 */
       86 +/* was  REG_WORDS       0x00080 */
       87 +/* was  REG_EGREP       0x01000 */
       88 +/* was  REG_DUMP        0x02000 */
  88   89  #define REG_PEND        0x04000         /* NULs are ordinary characters */
  89   90  #define REG_NOSPEC      0x08000         /* no special characters */
       91 +#define REG_LITERAL     0x08000         /* no special characters */
  90   92  
  91      -/* internal flags */
  92      -#define REG_MUST        0x00100         /* legacy, no effect */
  93      -
  94   93  /* regexec flags */
  95      -#define REG_NOTBOL      0x00200         /* string is not BOL */
  96      -#define REG_NOTEOL      0x00400         /* string has no EOL */
  97      -#define REG_NOOPT       0x00800         /* legacy, no effect */
  98      -#define REG_STARTEND    0x10000         /* match whole pattern */
  99      -#define REG_TRACE       0x20000         /* tracing of execution */
 100      -#define REG_LARGE       0x40000         /* force large representation */
 101      -#define REG_BACKR       0x80000         /* force use of backref code */
       94 +/* was  REG_MUST        0x00100 */
       95 +#define REG_NOTBOL      0x00200         /* string is not BOL (POSIX) */
       96 +#define REG_NOTEOL      0x00400         /* string has no EOL (POSIX) */
       97 +/* was  REG_NOOPT       0x00800 */
       98 +#define REG_STARTEND    0x10000         /* match whole pattern (BSD) */
 102   99  
 103  100  /* regcomp and regexec return codes */
 104  101  #define REG_OK          0               /* success (non-standard) */
 105      -#define REG_NOMATCH     1               /* regexec failed to match */
 106      -#define REG_ECOLLATE    2               /* invalid collation element ref. */
 107      -#define REG_EESCAPE     3               /* trailing \ in pattern */
 108      -#define REG_ENEWLINE    4               /* \n found before end of pattern */
 109      -#define REG_ENSUB       5               /* more than 9 \( \) pairs (OBS) */
 110      -#define REG_ESUBREG     6               /* number in \[0-9] invalid */
 111      -#define REG_EBRACK      7               /* [ ] imbalance */
 112      -#define REG_EPAREN      8               /* ( ) imbalance */
 113      -#define REG_EBRACE      9               /* \{ \} imbalance */
 114      -#define REG_ERANGE      10              /* invalid endpoint in range */
 115      -#define REG_ESPACE      11              /* no memory for compiled pattern */
 116      -#define REG_BADRPT      12              /* invalid repetition */
 117      -#define REG_ECTYPE      13              /* invalid char-class type */
 118      -#define REG_BADPAT      14              /* syntax error */
 119      -#define REG_BADBR       15              /* \{ \} contents bad */
 120      -#define REG_EFATAL      16              /* internal error, not POSIX.2 */
      102 +#define REG_NOMATCH     1               /* regexec failed to match (POSIX) */
      103 +#define REG_ECOLLATE    2               /* invalid coll. element ref. (POSIX) */
      104 +#define REG_EESCAPE     3               /* trailing \ in pattern (POSIX) */
      105 +/* was  REG_ENEWLINE    4 */
      106 +/* was  REG_ENSUB       5 */
      107 +#define REG_ESUBREG     6               /* number in \[0-9] invalid (POSIX) */
      108 +#define REG_EBRACK      7               /* [ ] imbalance (POSIX) */
      109 +#define REG_EPAREN      8               /* ( ) imbalance (POSIX) */
      110 +#define REG_EBRACE      9               /* \{ \} imbalance (POSIX) */
      111 +#define REG_ERANGE      10              /* invalid endpoint in range (POSIX) */
      112 +#define REG_ESPACE      11              /* out of memory (POSIX) */
      113 +#define REG_BADRPT      12              /* invalid repetition (POSIX) */
      114 +#define REG_ECTYPE      13              /* invalid char-class type (POSIX) */
      115 +#define REG_BADPAT      14              /* syntax error (POSIX) */
      116 +#define REG_BADBR       15              /* \{ \} contents bad (POSIX) */
      117 +/* was  REG_EFATAL      16 */
 121  118  #define REG_ECHAR       17              /* invalid multibyte character */
 122      -#define REG_STACK       18              /* backtrack stack overflow */
      119 +#define REG_ILLSEQ      17              /* invalid multibyte character (BSD) */
      120 +/* was  REG_STACK       18 */
      121 +/* REG_ENOSYS was removed in XPG7 */
      122 +#if defined(_STRICT_SYMBOLS) && !defined(_XPG7)
 123  123  #define REG_ENOSYS      19              /* function not supported (XPG4) */
 124      -#define REG__LAST       20              /* first unused code */
 125      -#define REG_EBOL        21              /* ^ anchor and not BOL */
 126      -#define REG_EEOL        22              /* $ anchor and not EOL */
 127      -#define REG_ATOI        255             /* convert name to number (!) */
 128      -#define REG_ITOA        256             /* convert number to name (!) */
      124 +#endif
      125 +/* was  REG__LAST       20 */
      126 +/* was  REG_EBOL        21 */
      127 +/* was  REG_EEOL        22 */
      128 +#define REG_EMPTY       23              /* empty (sub)expression */
      129 +#define REG_INVARG      24              /* invalid argument */
 129  130  
 130  131  #define _REG_BACKREF_MAX 9              /* Max # of subexp. backreference */
 131  132  
      133 +/*
      134 + * Note that any changes to this structure have to preserve sizing,
      135 + * as it is baked into applications.  Size needs to stay 24/48 bytes
      136 + * for 32/64 bit libc, respectively.
      137 + */
 132  138  typedef struct {                /* regcomp() data saved for regexec() */
 133  139          size_t  re_nsub;        /* # of subexpressions in RE pattern */
      140 +        void *value;            /* internal use only */
      141 +        int re_magic;
      142 +        const void *re_endp;
 134  143  
 135  144          /*
 136      -         * Internal use only.  Note that any changes to this structure
 137      -         * have to preserve sizing, as it is baked into applications.
      145 +         * These are here for binary compatibility (see the note about
      146 +         * sizing above).
 138  147           */
 139      -        struct re_guts *re_g;
 140      -        int re_magic;
 141      -        const char *re_endp;
 142      -
 143      -        /* here for compat */
 144      -        size_t  re_len;         /* # wchar_t chars in compiled pattern */
 145      -        struct _regex_ext_t *re_sc;     /* for binary compatibility */
      148 +        size_t  __pad1;
      149 +        void    *__pad2;
 146  150  } regex_t;
 147  151  
 148  152  /* subexpression positions */
 149  153  typedef struct {
 150  154          const char      *rm_sp, *rm_ep; /* Start pointer, end pointer */
 151  155          regoff_t        rm_so, rm_eo;   /* Start offset, end offset */
 152  156          int             rm_ss, rm_es;   /* Used internally */
 153  157  } regmatch_t;
 154  158  
 155      -
 156  159  /*
 157  160   * IEEE Std 1003.2 ("POSIX.2") regular expressions API.
 158  161   */
 159  162  
 160  163  extern int regcomp(regex_t *_RESTRICT_KYWD, const char *_RESTRICT_KYWD, int);
 161  164  extern int regexec(const regex_t *_RESTRICT_KYWD, const char *_RESTRICT_KYWD,
 162  165      size_t, regmatch_t *_RESTRICT_KYWD, int);
 163  166  extern size_t regerror(int, const regex_t *_RESTRICT_KYWD, char *_RESTRICT_KYWD,
 164  167      size_t);
 165  168  extern void regfree(regex_t *);
 166  169  
 167  170  #ifdef  __cplusplus
 168  171  }
 169  172  #endif
 170  173  
 171  174  #endif  /* _REGEX_H */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX