[BZ #693]
authorUlrich Drepper <drepper@redhat.com>
Wed, 26 Jan 2005 19:56:03 +0000 (19:56 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 26 Jan 2005 19:56:03 +0000 (19:56 +0000)
Update.
2005-01-26  Jakub Jelinek  <jakub@redhat.com>

* sysdeps/unix/sysv/linux/i386/sysdep.h
(SYSCALL_ERROR_HANDLER_TLS_STORE): Remove unnecessary 0 imm.

[BZ #693]
* posix/regex_internal.h (DUMMY_CONSTRAINT): Rename to...
(WORD_DELIM_CONSTRAINT): ...this.
(NOT_WORD_DELIM_CONSTRAINT): Define.
(re_context_type): Add INSIDE_NOTWORD and NOT_WORD_DELIM,
change WORD_DELIM to use WORD_DELIM_CONSTRAINT.
* posix/regcomp.c (peek_token): For \B create NOT_WORD_DELIM
anchor instead of INSIDE_WORD.
(parse_expression): Handle NOT_WORD_DELIM constraint.
* posix/bug-regex19.c (tests): Adjust tests that relied on \B
being inside word instead of not word delim.
* posix/tst-rxspencer.c (mb_frob_pattern): Don't frob escaped
characters.
* posix/rxspencer/tests: Add some new tests.

ChangeLog
posix/bug-regex19.c
posix/regcomp.c
posix/rxspencer/tests
posix/tst-rxspencer.c
sysdeps/unix/sysv/linux/i386/sysdep.h

index 19f0504..77a3174 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+2005-01-26  Jakub Jelinek  <jakub@redhat.com>
+
+       * sysdeps/unix/sysv/linux/i386/sysdep.h
+       (SYSCALL_ERROR_HANDLER_TLS_STORE): Remove unnecessary 0 imm.
+
+       [BZ #693]
+       * posix/regex_internal.h (DUMMY_CONSTRAINT): Rename to...
+       (WORD_DELIM_CONSTRAINT): ...this.
+       (NOT_WORD_DELIM_CONSTRAINT): Define.
+       (re_context_type): Add INSIDE_NOTWORD and NOT_WORD_DELIM,
+       change WORD_DELIM to use WORD_DELIM_CONSTRAINT.
+       * posix/regcomp.c (peek_token): For \B create NOT_WORD_DELIM
+       anchor instead of INSIDE_WORD.
+       (parse_expression): Handle NOT_WORD_DELIM constraint.
+       * posix/bug-regex19.c (tests): Adjust tests that relied on \B
+       being inside word instead of not word delim.
+       * posix/tst-rxspencer.c (mb_frob_pattern): Don't frob escaped
+       characters.
+       * posix/rxspencer/tests: Add some new tests.
+
 2005-01-14  GOTO Masanori  <gotom@debian.or.jp>
 
        * sunrpc/rpc_main.c (s_output): Generate #include <rpc/pmap_clnt.h>
index 4000b19..3a173a6 100644 (file)
@@ -1,5 +1,5 @@
 /* Regular expression tests.
-   Copyright (C) 2003 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
 
@@ -170,22 +170,22 @@ static struct test_s
   {ERE, "[^k]\\B[^k]", "kBk", 0, -1},
   {ERE, "[^C]\\B[^C]", "CCCABA", 0, 3},
   {ERE, "[^C]\\B[^C]", "CBC", 0, -1},
-  {ERE, ".(\\b|\\B).", "=~AB", 0, 1},
+  {ERE, ".(\\b|\\B).", "=~AB", 0, 0},
   {ERE, ".(\\b|\\B).", "A=C", 0, 0},
   {ERE, ".(\\b|\\B).", "ABC", 0, 0},
-  {ERE, ".(\\b|\\B).", "=~\\!", 0, -1},
-  {ERE, "[^k](\\b|\\B)[^k]", "=~AB", 0, 1},
+  {ERE, ".(\\b|\\B).", "=~\\!", 0, 0},
+  {ERE, "[^k](\\b|\\B)[^k]", "=~AB", 0, 0},
   {ERE, "[^k](\\b|\\B)[^k]", "A=C", 0, 0},
   {ERE, "[^k](\\b|\\B)[^k]", "ABC", 0, 0},
-  {ERE, "[^k](\\b|\\B)[^k]", "=~kBD", 0, 3},
-  {ERE, "[^k](\\b|\\B)[^k]", "=~\\!", 0, -1},
-  {ERE, "[^k](\\b|\\B)[^k]", "=~kB", 0, -1},
-  {ERE, "[^C](\\b|\\B)[^C]", "=~AB", 0, 1},
+  {ERE, "[^k](\\b|\\B)[^k]", "=~kBD", 0, 0},
+  {ERE, "[^k](\\b|\\B)[^k]", "=~\\!", 0, 0},
+  {ERE, "[^k](\\b|\\B)[^k]", "=~kB", 0, 0},
+  {ERE, "[^C](\\b|\\B)[^C]", "=~AB", 0, 0},
   {ERE, "[^C](\\b|\\B)[^C]", "A=C", 0, 0},
   {ERE, "[^C](\\b|\\B)[^C]", "ABC", 0, 0},
-  {ERE, "[^C](\\b|\\B)[^C]", "=~CBD", 0, 3},
-  {ERE, "[^C](\\b|\\B)[^C]", "=~\\!", 0, -1},
-  {ERE, "[^C](\\b|\\B)[^C]", "=~CB", 0, -1},
+  {ERE, "[^C](\\b|\\B)[^C]", "=~CBD", 0, 0},
+  {ERE, "[^C](\\b|\\B)[^C]", "=~\\!", 0, 0},
+  {ERE, "[^C](\\b|\\B)[^C]", "=~CB", 0, 0},
   {ERE, "\\b([A]|[!]|.B)", "A=AC", 0, 0},
   {ERE, "\\b([A]|[!]|.B)", "=AC", 0, 1},
   {ERE, "\\b([A]|[!]|.B)", "!AC", 0, 1},
index a8c1f74..2ac9953 100644 (file)
@@ -1859,7 +1859,7 @@ peek_token (token, input, syntax)
          if (!(syntax & RE_NO_GNU_OPS))
            {
              token->type = ANCHOR;
-             token->opr.ctx_type = INSIDE_WORD;
+             token->opr.ctx_type = NOT_WORD_DELIM;
            }
          break;
        case 'w':
@@ -2349,15 +2349,25 @@ parse_expression (regexp, preg, token, syntax, nest, err)
       break;
     case ANCHOR:
       if ((token->opr.ctx_type
-          & (WORD_DELIM | INSIDE_WORD | WORD_FIRST | WORD_LAST))
+          & (WORD_DELIM | NOT_WORD_DELIM | WORD_FIRST | WORD_LAST))
          && dfa->word_ops_used == 0)
        init_word_char (dfa);
-      if (token->opr.ctx_type == WORD_DELIM)
+      if (token->opr.ctx_type == WORD_DELIM
+          || token->opr.ctx_type == NOT_WORD_DELIM)
        {
          bin_tree_t *tree_first, *tree_last;
-         token->opr.ctx_type = WORD_FIRST;
-         tree_first = re_dfa_add_tree_node (dfa, NULL, NULL, token);
-         token->opr.ctx_type = WORD_LAST;
+         if (token->opr.ctx_type == WORD_DELIM)
+           {
+             token->opr.ctx_type = WORD_FIRST;
+             tree_first = re_dfa_add_tree_node (dfa, NULL, NULL, token);
+             token->opr.ctx_type = WORD_LAST;
+            }
+          else
+            {
+             token->opr.ctx_type = INSIDE_WORD;
+             tree_first = re_dfa_add_tree_node (dfa, NULL, NULL, token);
+             token->opr.ctx_type = INSIDE_NOTWORD;
+            }
          tree_last = re_dfa_add_tree_node (dfa, NULL, NULL, token);
          token->type = OP_ALT;
          tree = re_dfa_add_tree_node (dfa, tree_first, tree_last, token);
index a724252..a8b6e4b 100644 (file)
@@ -526,3 +526,12 @@ a((b+|((c)*)))+d   -       abcd    abcd    c,c,c,c
 (((\b))){0}    -       x       @x      -,-,-
 a(((.*)))b((\2)){0}c   -       abc     abc     @bc,@bc,@bc,-,-
 a(((.*)))b((\1)){0}c   -       axbc    axbc    x,x,x,-,-
+
+\b     &       SaT     @aT
+\b     &       aT      @aT
+a.*\b  &       abT     ab
+\b     &       STSS
+\B     &       abc     @bc
+\B     &       aSbTc
+\B     &       SaT     @SaT
+\B     &       aSTSb   @TSb
index cb40421..a68bab2 100644 (file)
@@ -1,5 +1,5 @@
 /* Regular expression tests.
-   Copyright (C) 2003 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
 
@@ -127,14 +127,15 @@ mb_frob_string (const char *str, const char *letters)
 }
 
 /* Like mb_frob_string, but don't replace anything between
-   [: and :], [. and .] or [= and =].  */
+   [: and :], [. and .] or [= and =] or characters escaped
+   with a backslash.  */
 
 static char *
 mb_frob_pattern (const char *str, const char *letters)
 {
   char *ret, *dst;
   const char *src;
-  int in_class = 0;
+  int in_class = 0, escaped = 0;
 
   if (str == NULL)
     return NULL;
@@ -144,7 +145,18 @@ mb_frob_pattern (const char *str, const char *letters)
     return NULL;
 
   for (src = str, dst = ret; *src; ++src)
-    if (!in_class && strchr (letters, *src))
+    if (*src == '\\')
+      {
+       escaped ^= 1;
+       *dst++ = *src;
+      }
+    else if (escaped)
+      {
+       escaped = 0;
+       *dst++ = *src;
+       continue;
+      }
+    else if (!in_class && strchr (letters, *src))
       dst = mb_replace (dst, *src);
     else
       {
index 02a35dc..cfa030b 100644 (file)
@@ -159,7 +159,7 @@ __i686.get_pc_thunk.reg:                                                  \
   jmp L(pseudo_end);
 #   ifndef NO_TLS_DIRECT_SEG_REFS
 #    define SYSCALL_ERROR_HANDLER_TLS_STORE(src, destoff)                    \
-  movl src, %gs:0(destoff)
+  movl src, %gs:(destoff)
 #   else
 #    define SYSCALL_ERROR_HANDLER_TLS_STORE(src, destoff)                    \
   addl %gs:0, destoff;                                                       \