]> git.saurik.com Git - apple/libc.git/blobdiff - regex/FreeBSD/regex2.h.patch
Libc-763.12.tar.gz
[apple/libc.git] / regex / FreeBSD / regex2.h.patch
index fd35a89645aee1d27334effc19487c6ff761dd12..ec20caa7d2ee8dd2a5b3b686f87a7feb2351ee7a 100644 (file)
@@ -1,18 +1,31 @@
---- regex2.h.orig      2004-11-25 11:38:32.000000000 -0800
-+++ regex2.h   2005-02-24 14:26:21.000000000 -0800
-@@ -127,9 +127,10 @@
+--- regex2.h.bsdnew    2009-11-11 11:29:04.000000000 -0800
++++ regex2.h   2009-11-11 12:18:35.000000000 -0800
+@@ -120,14 +120,23 @@ typedef struct {
+       int             nranges;
+       int             invert;
+       int             icase;
++      int             *equiv_classes;
++      int             nequiv_classes;
  } cset;
  
++#include "collate.h"
++
  static int
--CHIN1(cs, ch)
-+CHIN1(cs, ch, loc)
- cset *cs;
- wint_t ch;
-+locale_t loc;
+-CHIN1(cset *cs, wint_t ch)
++CHIN1(cset *cs, wint_t ch, locale_t loc)
  {
        int i;
  
-@@ -144,15 +145,16 @@
+       assert(ch >= 0);
++      for (i = 0; i < cs->nequiv_classes; i++)
++              /* sadly, we can only deal with single characters from an
++               * equivalence class */
++              if (__collate_equiv_match(cs->equiv_classes[i], NULL, 0, ch, NULL, 0, NULL, NULL, loc) > 0)
++                      return (!cs->invert);
+       if (ch < NC)
+               return (((cs->bmp[ch >> 3] & (1 << (ch & 7))) != 0) ^
+                   cs->invert);
+@@ -138,24 +147,24 @@ CHIN1(cset *cs, wint_t ch)
                if (cs->ranges[i].min <= ch && ch <= cs->ranges[i].max)
                        return (!cs->invert);
        for (i = 0; i < cs->ntypes; i++)
  }
  
  static __inline int
--CHIN(cs, ch)
-+CHIN(cs, ch, loc)
- cset *cs;
- wint_t ch;
-+locale_t loc;
+-CHIN(cset *cs, wint_t ch)
++CHIN(cset *cs, wint_t ch, locale_t loc)
  {
  
        assert(ch >= 0);
-@@ -160,10 +162,10 @@
+-      if (ch < NC)
++      if (ch < NC && cs->nequiv_classes == 0)
                return (((cs->bmp[ch >> 3] & (1 << (ch & 7))) != 0) ^
                    cs->invert);
        else if (cs->icase)
@@ -45,7 +56,7 @@
  }
  
  /*
-@@ -193,8 +195,9 @@
+@@ -185,8 +194,9 @@ struct re_guts {
        size_t nsub;            /* copy of re_nsub */
        int backrefs;           /* does it use back references? */
        sopno nplus;            /* how deep does it nest +s? */
@@ -53,6 +64,7 @@
  };
  
  /* misc utilities */
- #define       OUT     (-2)    /* a non-character value */
+-#define       OUT     (CHAR_MIN - 1)  /* a non-character value */
 -#define ISWORD(c)       (iswalnum((uch)(c)) || (c) == '_')
++#define       OUT     (CHAR_MIN - 2)  /* a non-character value */
 +#define ISWORD(c,l)     (iswalnum_l((uch)(c), l) || (c) == '_')