]> Savannah Git Hosting - gnulib.git/commitdiff
regex: merge patches from libc
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 19 Sep 2015 16:21:47 +0000 (09:21 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Sat, 19 Sep 2015 17:16:47 +0000 (10:16 -0700)
2015-09-08  Joseph Myers  <joseph@codesourcery.com>
Move bits/libc-lock.h and bits/libc-lockP.h out of bits/ (bug 14912).
* lib/regex_internal.h:
Include <libc-lock.h> instead of <bits/libc-lock.h>.

2015-06-09  Joseph Myers  <joseph@codesourcery.com>
Fix regcomp wcscoll, wcscmp namespace (bug 18497).
* lib/regcomp.c (build_range_exp): Call __wcscoll instead of
wcscoll.
* lib/regexec.c (check_node_accept_bytes): Likewise.

2015-06-05  Joseph Myers  <joseph@codesourcery.com>
Fix regex wcrtomb namespace (bug 18496).
* lib/regex_internal.c (build_wcs_upper_buffer): Call __wcrtomb
instead of wcrtomb.

2015-06-05  Joseph Myers  <joseph@codesourcery.com>
Fix regex wctype namespace (bug 18495).
* lib/regcomp.c (re_compile_fastmap_iter): Call __towlower
instead of towlower.
* lib/regex_internal.c (build_wcs_upper_buffer): Call __iswlower
instead of iswlower.  Call __towupper instead of towupper.
* lib/regex_internal.h (IS_WIDE_WORD_CHAR): Call __iswalnum
instead of iswalnum.

2015-01-07  Chris Metcalf  <cmetcalf@ezchip.com>
* lib/regcomp.c (parse_bracket_exp): Initialize type to
COLL_SYM in a couple of places to avoid uninitialized variable
wanings on tilegx gcc 4.8.2.

2014-11-24  Siddhesh Poyarekar  <siddhesh@redhat.com>
* lib/regex_internal.h: Remove NOT_IN_libc.

2014-11-17  Andreas Schwab  <schwab@suse.de>
* lib/regex_internal.h: Don't include <locale/elem-hash.h>.

2014-09-11  Roland McGrath  <roland@hack.frob.com>
Move findidx nested functions to top-level.
* lib/regcomp.c [_LIBC]: #include <locale/weight.h>.
(build_equiv_class) [_LIBC]: Don't #include it inside the function.
Pass new arguments to findidx.
* lib/regexec.c [RE_ENABLE_I18N] [_LIBC]: #include <locale/weight.h>.
[RE_ENABLE_I18N] (check_node_accept_bytes) [_LIBC]:
Don't #include it inside the function.  Pass new arguments to findidx.
* lib/regex_internal.h:
[!NOT_IN_libc] [_LIBC]: #include <locale/weight.h>.
(re_string_elem_size_at): Don't #include it inside the function.
Pass new arguments to findidx.

2014-08-01  Siddhesh Poyarekar  <siddhesh@redhat.com>
Check if DEBUG is defined in regex_internal.c
* lib/regex_internal.c: Check if DEBUG is defined and is set.

ChangeLog
lib/regcomp.c
lib/regex_internal.c
lib/regex_internal.h
lib/regexec.c

index de20d36abb85de1b0474476978482187b625ce93..f846aac701aa5d18edfde1c28edb027c9f408453 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,60 @@
+2015-09-19  Paul Eggert  <eggert@cs.ucla.edu>
+
+       regex: merge patches from libc
+
+       2015-09-08  Joseph Myers  <joseph@codesourcery.com>
+       Move bits/libc-lock.h and bits/libc-lockP.h out of bits/ (bug 14912).
+       * lib/regex_internal.h:
+       Include <libc-lock.h> instead of <bits/libc-lock.h>.
+
+       2015-06-09  Joseph Myers  <joseph@codesourcery.com>
+       Fix regcomp wcscoll, wcscmp namespace (bug 18497).
+       * lib/regcomp.c (build_range_exp): Call __wcscoll instead of
+       wcscoll.
+       * lib/regexec.c (check_node_accept_bytes): Likewise.
+
+       2015-06-05  Joseph Myers  <joseph@codesourcery.com>
+       Fix regex wcrtomb namespace (bug 18496).
+       * lib/regex_internal.c (build_wcs_upper_buffer): Call __wcrtomb
+       instead of wcrtomb.
+
+       2015-06-05  Joseph Myers  <joseph@codesourcery.com>
+       Fix regex wctype namespace (bug 18495).
+       * lib/regcomp.c (re_compile_fastmap_iter): Call __towlower
+       instead of towlower.
+       * lib/regex_internal.c (build_wcs_upper_buffer): Call __iswlower
+       instead of iswlower.  Call __towupper instead of towupper.
+       * lib/regex_internal.h (IS_WIDE_WORD_CHAR): Call __iswalnum
+       instead of iswalnum.
+
+       2015-01-07  Chris Metcalf  <cmetcalf@ezchip.com>
+       * lib/regcomp.c (parse_bracket_exp): Initialize type to
+       COLL_SYM in a couple of places to avoid uninitialized variable
+       wanings on tilegx gcc 4.8.2.
+
+       2014-11-24  Siddhesh Poyarekar  <siddhesh@redhat.com>
+       * lib/regex_internal.h: Remove NOT_IN_libc.
+
+       2014-11-17  Andreas Schwab  <schwab@suse.de>
+       * lib/regex_internal.h: Don't include <locale/elem-hash.h>.
+
+       2014-09-11  Roland McGrath  <roland@hack.frob.com>
+       Move findidx nested functions to top-level.
+       * lib/regcomp.c [_LIBC]: #include <locale/weight.h>.
+       (build_equiv_class) [_LIBC]: Don't #include it inside the function.
+       Pass new arguments to findidx.
+       * lib/regexec.c [RE_ENABLE_I18N] [_LIBC]: #include <locale/weight.h>.
+       [RE_ENABLE_I18N] (check_node_accept_bytes) [_LIBC]:
+       Don't #include it inside the function.  Pass new arguments to findidx.
+       * lib/regex_internal.h:
+       [!NOT_IN_libc] [_LIBC]: #include <locale/weight.h>.
+       (re_string_elem_size_at): Don't #include it inside the function.
+       Pass new arguments to findidx.
+
+       2014-08-01  Siddhesh Poyarekar  <siddhesh@redhat.com>
+       Check if DEBUG is defined in regex_internal.c
+       * lib/regex_internal.c: Check if DEBUG is defined and is set.
+
 2015-09-08   Assaf Gordon  <assafgordon@gmail.com>
 
        ceill: detect buggy OpenBSD implementation
index 840220f8ed6d2fa77609d1fe29bbe04d2ac2c9ce..f50afb4bb8ee179cb52ac04b59aee6293a92408c 100644 (file)
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#ifdef _LIBC
+# include <locale/weight.h>
+#endif
+
 static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern,
                                          size_t length, reg_syntax_t syntax);
 static void re_compile_fastmap_iter (regex_t *bufp,
@@ -335,7 +339,7 @@ re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state,
              memset (&state, '\0', sizeof (state));
              if (__mbrtowc (&wc, (const char *) buf, p - buf,
                             &state) == p - buf
-                 && (__wcrtomb ((char *) buf, towlower (wc), &state)
+                 && (__wcrtomb ((char *) buf, __towlower (wc), &state)
                      != (size_t) -1))
                re_set_fastmap (fastmap, false, buf[0]);
            }
@@ -411,7 +415,7 @@ re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state,
                    re_set_fastmap (fastmap, icase, *(unsigned char *) buf);
                  if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1)
                    {
-                     if (__wcrtomb (buf, towlower (cset->mbchars[i]), &state)
+                     if (__wcrtomb (buf, __towlower (cset->mbchars[i]), &state)
                          != (size_t) -1)
                        re_set_fastmap (fastmap, false, *(unsigned char *) buf);
                    }
@@ -3175,6 +3179,7 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token,
       re_token_t token2;
 
       start_elem.opr.name = start_name_buf;
+      start_elem.type = COLL_SYM;
       ret = parse_bracket_element (&start_elem, regexp, token, token_len, dfa,
                                   syntax, first_round);
       if (BE (ret != REG_NOERROR, 0))
@@ -3218,6 +3223,7 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token,
       if (is_range_exp == true)
        {
          end_elem.opr.name = end_name_buf;
+         end_elem.type = COLL_SYM;
          ret = parse_bracket_element (&end_elem, regexp, &token2, token_len2,
                                       dfa, syntax, true);
          if (BE (ret != REG_NOERROR, 0))
@@ -3492,8 +3498,6 @@ build_equiv_class (bitset_t sbcset, const unsigned char *name)
       int32_t idx1, idx2;
       unsigned int ch;
       size_t len;
-      /* This #include defines a local function!  */
-# include <locale/weight.h>
       /* Calculate the index for equivalence class.  */
       cp = name;
       table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
@@ -3503,7 +3507,7 @@ build_equiv_class (bitset_t sbcset, const unsigned char *name)
                                                   _NL_COLLATE_EXTRAMB);
       indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE,
                                                _NL_COLLATE_INDIRECTMB);
-      idx1 = findidx (&cp, -1);
+      idx1 = findidx (table, indirect, extra, &cp, -1);
       if (BE (idx1 == 0 || *cp != '\0', 0))
        /* This isn't a valid character.  */
        return REG_ECOLLATE;
@@ -3514,7 +3518,7 @@ build_equiv_class (bitset_t sbcset, const unsigned char *name)
        {
          char_buf[0] = ch;
          cp = char_buf;
-         idx2 = findidx (&cp, 1);
+         idx2 = findidx (table, indirect, extra, &cp, 1);
 /*
          idx2 = table[ch];
 */
index 36ae6ab9b6f2fbe39f8c7255be711b2fed119db2..93d7ee9641af93acbfb85ea4b18387f3e06e94c0 100644 (file)
@@ -311,12 +311,12 @@ build_wcs_upper_buffer (re_string_t *pstr)
                               + byte_idx), remain_len, &pstr->cur_state);
          if (BE (mbclen < (size_t) -2, 1))
            {
-             wchar_t wcu = towupper (wc);
+             wchar_t wcu = __towupper (wc);
              if (wcu != wc)
                {
                  size_t mbcdlen;
 
-                 mbcdlen = wcrtomb (buf, wcu, &prev_st);
+                 mbcdlen = __wcrtomb (buf, wcu, &prev_st);
                  if (BE (mbclen == mbcdlen, 1))
                    memcpy (pstr->mbs + byte_idx, buf, mbclen);
                  else
@@ -380,7 +380,7 @@ build_wcs_upper_buffer (re_string_t *pstr)
        mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state);
        if (BE (mbclen < (size_t) -2, 1))
          {
-           wchar_t wcu = towupper (wc);
+           wchar_t wcu = __towupper (wc);
            if (wcu != wc)
              {
                size_t mbcdlen;
index ff486bb48fd7af47f5531550814e8510b3b08ee1..0307a340f711ccca3460ff1c7afa660b3dc8e5be 100644 (file)
@@ -34,7 +34,7 @@
 #include <stdint.h>
 
 #ifdef _LIBC
-# include <bits/libc-lock.h>
+# include <libc-lock.h>
 # define lock_define(name) __libc_lock_define (, name)
 # define lock_init(lock) (__libc_lock_init (lock), 0)
 # define lock_fini(lock) 0
@@ -87,7 +87,6 @@
 # ifndef _RE_DEFINE_LOCALE_FUNCTIONS
 #  define _RE_DEFINE_LOCALE_FUNCTIONS 1
 #   include <locale/localeinfo.h>
-#   include <locale/elem-hash.h>
 #   include <locale/coll-lookup.h>
 # endif
 #endif
 # undef __wctype
 # undef __iswctype
 # define __wctype wctype
+# define __iswalnum iswalnum
 # define __iswctype iswctype
+# define __towlower towlower
+# define __towupper towupper
 # define __btowc btowc
 # define __mbrtowc mbrtowc
 # define __wcrtomb wcrtomb
@@ -447,23 +449,23 @@ typedef struct re_dfa_t re_dfa_t;
 
 #ifndef _LIBC
 # define internal_function
+# define IS_IN(libc) false
 #endif
 
-#ifndef NOT_IN_libc
 static reg_errcode_t re_string_realloc_buffers (re_string_t *pstr,
                                                Idx new_buf_len)
      internal_function;
-# ifdef RE_ENABLE_I18N
+#ifdef RE_ENABLE_I18N
 static void build_wcs_buffer (re_string_t *pstr) internal_function;
 static reg_errcode_t build_wcs_upper_buffer (re_string_t *pstr)
   internal_function;
-# endif /* RE_ENABLE_I18N */
+#endif /* RE_ENABLE_I18N */
 static void build_upper_buffer (re_string_t *pstr) internal_function;
 static void re_string_translate_buffer (re_string_t *pstr) internal_function;
 static unsigned int re_string_context_at (const re_string_t *input, Idx idx,
                                          int eflags)
      internal_function __attribute__ ((pure));
-#endif
+
 #define re_string_peek_byte(pstr, offset) \
   ((pstr)->mbs[(pstr)->cur_idx + offset])
 #define re_string_fetch_byte(pstr) \
@@ -556,7 +558,7 @@ typedef struct bin_tree_storage_t bin_tree_storage_t;
 
 #define IS_WORD_CHAR(ch) (isalnum (ch) || (ch) == '_')
 #define IS_NEWLINE(ch) ((ch) == NEWLINE_CHAR)
-#define IS_WIDE_WORD_CHAR(ch) (iswalnum (ch) || (ch) == L'_')
+#define IS_WIDE_WORD_CHAR(ch) (__iswalnum (ch) || (ch) == L'_')
 #define IS_WIDE_NEWLINE(ch) ((ch) == WIDE_NEWLINE_CHAR)
 
 #define NOT_SATISFY_PREV_CONSTRAINT(constraint,context) \
@@ -860,15 +862,17 @@ re_string_wchar_at (const re_string_t *pstr, Idx idx)
   return (wint_t) pstr->wcs[idx];
 }
 
-# ifndef NOT_IN_libc
+# ifdef _LIBC
+#  include <locale/weight.h>
+# endif
+
 static int
 internal_function __attribute__ ((pure, unused))
 re_string_elem_size_at (const re_string_t *pstr, Idx idx)
 {
-#  ifdef _LIBC
+# ifdef _LIBC
   const unsigned char *p, *extra;
   const int32_t *table, *indirect;
-#   include <locale/weight.h>
   uint_fast32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
 
   if (nrules != 0)
@@ -879,14 +883,13 @@ re_string_elem_size_at (const re_string_t *pstr, Idx idx)
       indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE,
                                                _NL_COLLATE_INDIRECTMB);
       p = pstr->mbs + idx;
-      findidx (&p, pstr->len - idx);
+      findidx (table, indirect, extra, &p, pstr->len - idx);
       return p - pstr->mbs - idx;
     }
   else
-#  endif /* _LIBC */
+# endif /* _LIBC */
     return 1;
 }
-# endif
 #endif /* RE_ENABLE_I18N */
 
 #ifndef __GNUC_PREREQ
index d3920c4810faffb88bbc3fdd2dbcde415156b467..db50a564abf8dc261d4112c64095ddb388768072 100644 (file)
@@ -3776,6 +3776,10 @@ group_nodes_into_DFAstates (const re_dfa_t *dfa, const re_dfastate_t *state,
    one collating element like '.', '[a-z]', opposite to the other nodes
    can only accept one byte.  */
 
+# ifdef _LIBC
+#  include <locale/weight.h>
+# endif
+
 static int
 internal_function
 check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx,
@@ -3895,8 +3899,6 @@ check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx,
          const int32_t *table, *indirect;
          const unsigned char *weights, *extra;
          const char *collseqwc;
-         /* This #include defines a local function!  */
-#  include <locale/weight.h>
 
          /* match with collating_symbol?  */
          if (cset->ncoll_syms)
@@ -3953,7 +3955,7 @@ check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx,
                _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB);
              indirect = (const int32_t *)
                _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB);
-             int32_t idx = findidx (&cp, elem_len);
+             int32_t idx = findidx (table, indirect, extra, &cp, elem_len);
              if (idx > 0)
                for (i = 0; i < cset->nequiv_classes; ++i)
                  {