mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-07 06:43:00 +03:00
[BZ #693]
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.
This commit is contained in:
20
ChangeLog
20
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>
|
2005-01-14 GOTO Masanori <gotom@debian.or.jp>
|
||||||
|
|
||||||
* sunrpc/rpc_main.c (s_output): Generate #include <rpc/pmap_clnt.h>
|
* sunrpc/rpc_main.c (s_output): Generate #include <rpc/pmap_clnt.h>
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/* Regular expression tests.
|
/* 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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
||||||
|
|
||||||
@@ -170,22 +170,22 @@ static struct test_s
|
|||||||
{ERE, "[^k]\\B[^k]", "kBk", 0, -1},
|
{ERE, "[^k]\\B[^k]", "kBk", 0, -1},
|
||||||
{ERE, "[^C]\\B[^C]", "CCCABA", 0, 3},
|
{ERE, "[^C]\\B[^C]", "CCCABA", 0, 3},
|
||||||
{ERE, "[^C]\\B[^C]", "CBC", 0, -1},
|
{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).", "A=C", 0, 0},
|
||||||
{ERE, ".(\\b|\\B).", "ABC", 0, 0},
|
{ERE, ".(\\b|\\B).", "ABC", 0, 0},
|
||||||
{ERE, ".(\\b|\\B).", "=~\\!", 0, -1},
|
{ERE, ".(\\b|\\B).", "=~\\!", 0, 0},
|
||||||
{ERE, "[^k](\\b|\\B)[^k]", "=~AB", 0, 1},
|
{ERE, "[^k](\\b|\\B)[^k]", "=~AB", 0, 0},
|
||||||
{ERE, "[^k](\\b|\\B)[^k]", "A=C", 0, 0},
|
{ERE, "[^k](\\b|\\B)[^k]", "A=C", 0, 0},
|
||||||
{ERE, "[^k](\\b|\\B)[^k]", "ABC", 0, 0},
|
{ERE, "[^k](\\b|\\B)[^k]", "ABC", 0, 0},
|
||||||
{ERE, "[^k](\\b|\\B)[^k]", "=~kBD", 0, 3},
|
{ERE, "[^k](\\b|\\B)[^k]", "=~kBD", 0, 0},
|
||||||
{ERE, "[^k](\\b|\\B)[^k]", "=~\\!", 0, -1},
|
{ERE, "[^k](\\b|\\B)[^k]", "=~\\!", 0, 0},
|
||||||
{ERE, "[^k](\\b|\\B)[^k]", "=~kB", 0, -1},
|
{ERE, "[^k](\\b|\\B)[^k]", "=~kB", 0, 0},
|
||||||
{ERE, "[^C](\\b|\\B)[^C]", "=~AB", 0, 1},
|
{ERE, "[^C](\\b|\\B)[^C]", "=~AB", 0, 0},
|
||||||
{ERE, "[^C](\\b|\\B)[^C]", "A=C", 0, 0},
|
{ERE, "[^C](\\b|\\B)[^C]", "A=C", 0, 0},
|
||||||
{ERE, "[^C](\\b|\\B)[^C]", "ABC", 0, 0},
|
{ERE, "[^C](\\b|\\B)[^C]", "ABC", 0, 0},
|
||||||
{ERE, "[^C](\\b|\\B)[^C]", "=~CBD", 0, 3},
|
{ERE, "[^C](\\b|\\B)[^C]", "=~CBD", 0, 0},
|
||||||
{ERE, "[^C](\\b|\\B)[^C]", "=~\\!", 0, -1},
|
{ERE, "[^C](\\b|\\B)[^C]", "=~\\!", 0, 0},
|
||||||
{ERE, "[^C](\\b|\\B)[^C]", "=~CB", 0, -1},
|
{ERE, "[^C](\\b|\\B)[^C]", "=~CB", 0, 0},
|
||||||
{ERE, "\\b([A]|[!]|.B)", "A=AC", 0, 0},
|
{ERE, "\\b([A]|[!]|.B)", "A=AC", 0, 0},
|
||||||
{ERE, "\\b([A]|[!]|.B)", "=AC", 0, 1},
|
{ERE, "\\b([A]|[!]|.B)", "=AC", 0, 1},
|
||||||
{ERE, "\\b([A]|[!]|.B)", "!AC", 0, 1},
|
{ERE, "\\b([A]|[!]|.B)", "!AC", 0, 1},
|
||||||
|
@@ -1859,7 +1859,7 @@ peek_token (token, input, syntax)
|
|||||||
if (!(syntax & RE_NO_GNU_OPS))
|
if (!(syntax & RE_NO_GNU_OPS))
|
||||||
{
|
{
|
||||||
token->type = ANCHOR;
|
token->type = ANCHOR;
|
||||||
token->opr.ctx_type = INSIDE_WORD;
|
token->opr.ctx_type = NOT_WORD_DELIM;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'w':
|
case 'w':
|
||||||
@@ -2349,15 +2349,25 @@ parse_expression (regexp, preg, token, syntax, nest, err)
|
|||||||
break;
|
break;
|
||||||
case ANCHOR:
|
case ANCHOR:
|
||||||
if ((token->opr.ctx_type
|
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)
|
&& dfa->word_ops_used == 0)
|
||||||
init_word_char (dfa);
|
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;
|
bin_tree_t *tree_first, *tree_last;
|
||||||
token->opr.ctx_type = WORD_FIRST;
|
if (token->opr.ctx_type == WORD_DELIM)
|
||||||
tree_first = re_dfa_add_tree_node (dfa, NULL, NULL, token);
|
{
|
||||||
token->opr.ctx_type = WORD_LAST;
|
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);
|
tree_last = re_dfa_add_tree_node (dfa, NULL, NULL, token);
|
||||||
token->type = OP_ALT;
|
token->type = OP_ALT;
|
||||||
tree = re_dfa_add_tree_node (dfa, tree_first, tree_last, token);
|
tree = re_dfa_add_tree_node (dfa, tree_first, tree_last, token);
|
||||||
|
@@ -526,3 +526,12 @@ a((b+|((c)*)))+d - abcd abcd c,c,c,c
|
|||||||
(((\b))){0} - x @x -,-,-
|
(((\b))){0} - x @x -,-,-
|
||||||
a(((.*)))b((\2)){0}c - abc abc @bc,@bc,@bc,-,-
|
a(((.*)))b((\2)){0}c - abc abc @bc,@bc,@bc,-,-
|
||||||
a(((.*)))b((\1)){0}c - axbc axbc x,x,x,-,-
|
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
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/* Regular expression tests.
|
/* 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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
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
|
/* 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 *
|
static char *
|
||||||
mb_frob_pattern (const char *str, const char *letters)
|
mb_frob_pattern (const char *str, const char *letters)
|
||||||
{
|
{
|
||||||
char *ret, *dst;
|
char *ret, *dst;
|
||||||
const char *src;
|
const char *src;
|
||||||
int in_class = 0;
|
int in_class = 0, escaped = 0;
|
||||||
|
|
||||||
if (str == NULL)
|
if (str == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -144,7 +145,18 @@ mb_frob_pattern (const char *str, const char *letters)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
for (src = str, dst = ret; *src; ++src)
|
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);
|
dst = mb_replace (dst, *src);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@@ -159,7 +159,7 @@ __i686.get_pc_thunk.reg: \
|
|||||||
jmp L(pseudo_end);
|
jmp L(pseudo_end);
|
||||||
# ifndef NO_TLS_DIRECT_SEG_REFS
|
# ifndef NO_TLS_DIRECT_SEG_REFS
|
||||||
# define SYSCALL_ERROR_HANDLER_TLS_STORE(src, destoff) \
|
# define SYSCALL_ERROR_HANDLER_TLS_STORE(src, destoff) \
|
||||||
movl src, %gs:0(destoff)
|
movl src, %gs:(destoff)
|
||||||
# else
|
# else
|
||||||
# define SYSCALL_ERROR_HANDLER_TLS_STORE(src, destoff) \
|
# define SYSCALL_ERROR_HANDLER_TLS_STORE(src, destoff) \
|
||||||
addl %gs:0, destoff; \
|
addl %gs:0, destoff; \
|
||||||
|
Reference in New Issue
Block a user