mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
Update.
2003-11-25 Ulrich Drepper <drepper@redhat.com> * posix/runptests.c (main): Make errors fatal. * posix/PTESTS: One test in GA135 and GA136 check functionality which seems not guaranteed. 2003-11-25 Jakub Jelinek <jakub@redhat.com> * posix/regexec.c (re_search_internal): If prune_impossible_nodes returned REG_NOMATCH, set match_last to -1. Don't initialize pmatch[0] needlessly. Fix comment. (prune_impossible_nodes): Don't segfault on NULL state_log entry. (set_regs): Fix comment. * posix/regcomp.c (parse_bracket_exp): Only set has_plural_match if adding both SIMPLE_BRACKET and COMPLEX_BRACKET. (build_charclass_op): Set has_plural_match if adding both SIMPLE_BRACKET and COMPLEX_BRACKET. * posix/bug-regex11.c (tests): Fix register values for one commented out test. Add new tests. * posix/regex_internal.c (re_string_allocate): Make sure init_len is at least dfa->mb_cur_max. (re_string_reconstruct): If is_utf8, don't fall back into re_string_skip_chars just because idx points into a middle of valid UTF-8 character. Instead, set the wcs bytes which correspond to the partial character bytes to WEOF. * posix/regexec.c (re_search_internal): Allocate input.bufs_len + 1 instead of dfa->nodes_len + 1 state_log entries initially. * posix/bug-regex20.c (main): Uncomment backwards case insensitive tests.
This commit is contained in:
31
ChangeLog
31
ChangeLog
@ -1,3 +1,34 @@
|
|||||||
|
2003-11-25 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
|
* posix/runptests.c (main): Make errors fatal.
|
||||||
|
* posix/PTESTS: One test in GA135 and GA136 check functionality
|
||||||
|
which seems not guaranteed.
|
||||||
|
|
||||||
|
2003-11-25 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* posix/regexec.c (re_search_internal): If prune_impossible_nodes
|
||||||
|
returned REG_NOMATCH, set match_last to -1. Don't initialize
|
||||||
|
pmatch[0] needlessly. Fix comment.
|
||||||
|
(prune_impossible_nodes): Don't segfault on NULL state_log entry.
|
||||||
|
(set_regs): Fix comment.
|
||||||
|
* posix/regcomp.c (parse_bracket_exp): Only set has_plural_match
|
||||||
|
if adding both SIMPLE_BRACKET and COMPLEX_BRACKET.
|
||||||
|
(build_charclass_op): Set has_plural_match if adding both
|
||||||
|
SIMPLE_BRACKET and COMPLEX_BRACKET.
|
||||||
|
* posix/bug-regex11.c (tests): Fix register values for one commented
|
||||||
|
out test. Add new tests.
|
||||||
|
|
||||||
|
* posix/regex_internal.c (re_string_allocate): Make sure init_len
|
||||||
|
is at least dfa->mb_cur_max.
|
||||||
|
(re_string_reconstruct): If is_utf8, don't fall back into
|
||||||
|
re_string_skip_chars just because idx points into a middle of
|
||||||
|
valid UTF-8 character. Instead, set the wcs bytes which correspond
|
||||||
|
to the partial character bytes to WEOF.
|
||||||
|
* posix/regexec.c (re_search_internal): Allocate input.bufs_len + 1
|
||||||
|
instead of dfa->nodes_len + 1 state_log entries initially.
|
||||||
|
* posix/bug-regex20.c (main): Uncomment backwards case insensitive
|
||||||
|
tests.
|
||||||
|
|
||||||
2003-11-24 Jakub Jelinek <jakub@redhat.com>
|
2003-11-24 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
* posix/regex_internal.h (re_token_t): Add word_char bit. Add
|
* posix/regex_internal.h (re_token_t): Add word_char bit. Add
|
||||||
|
11
NEWS
11
NEWS
@ -1,4 +1,4 @@
|
|||||||
GNU C Library NEWS -- history of user-visible changes. 2003-4-24
|
GNU C Library NEWS -- history of user-visible changes. 2003-11-17
|
||||||
Copyright (C) 1992-2002,2003 Free Software Foundation, Inc.
|
Copyright (C) 1992-2002,2003 Free Software Foundation, Inc.
|
||||||
See the end for copying conditions.
|
See the end for copying conditions.
|
||||||
|
|
||||||
@ -18,6 +18,15 @@ Version 2.3.3
|
|||||||
|
|
||||||
* getaddrinfo now implements AI_V4MAPPED, AI_ALL, and AI_ADDRCONF.
|
* getaddrinfo now implements AI_V4MAPPED, AI_ALL, and AI_ADDRCONF.
|
||||||
Implemented by Ulrich Drepper.
|
Implemented by Ulrich Drepper.
|
||||||
|
|
||||||
|
* support for non-executable stacks on x86 has been added. Changes mostly
|
||||||
|
by Roland McGrath.
|
||||||
|
|
||||||
|
* regex is now much faster for multibyte locaes. Changes by Jakub Jelinek
|
||||||
|
and Ulrich Drepper.
|
||||||
|
|
||||||
|
* getaddrinfo now performs destination address selection according to
|
||||||
|
RFC 3484.
|
||||||
|
|
||||||
Version 2.3.2
|
Version 2.3.2
|
||||||
|
|
||||||
|
@ -1096,7 +1096,8 @@ cannot allocate TLS data structures for initial thread");
|
|||||||
prefer to map such objects at; but this is only a preference,
|
prefer to map such objects at; but this is only a preference,
|
||||||
the OS can do whatever it likes. */
|
the OS can do whatever it likes. */
|
||||||
ElfW(Addr) mappref;
|
ElfW(Addr) mappref;
|
||||||
mappref = (ELF_PREFERRED_ADDRESS (loader, maplength, c->mapstart)
|
mappref = (ELF_PREFERRED_ADDRESS (loader, maplength,
|
||||||
|
c->mapstart & GL(dl_use_load_bias))
|
||||||
- MAP_BASE_ADDR (l));
|
- MAP_BASE_ADDR (l));
|
||||||
|
|
||||||
/* Remember which part of the address space this object uses. */
|
/* Remember which part of the address space this object uses. */
|
||||||
|
@ -41,6 +41,7 @@ size_t _dl_platformlen;
|
|||||||
|
|
||||||
int _dl_debug_mask;
|
int _dl_debug_mask;
|
||||||
int _dl_lazy;
|
int _dl_lazy;
|
||||||
|
ElfW(Addr) _dl_use_load_bias = -2;
|
||||||
int _dl_dynamic_weak;
|
int _dl_dynamic_weak;
|
||||||
|
|
||||||
/* If nonzero print warnings about problematic situations. */
|
/* If nonzero print warnings about problematic situations. */
|
||||||
|
18
elf/rtld.c
18
elf/rtld.c
@ -95,6 +95,7 @@ struct rtld_global _rtld_global =
|
|||||||
._dl_sysinfo = DL_SYSINFO_DEFAULT,
|
._dl_sysinfo = DL_SYSINFO_DEFAULT,
|
||||||
#endif
|
#endif
|
||||||
._dl_lazy = 1,
|
._dl_lazy = 1,
|
||||||
|
._dl_use_load_bias = -2,
|
||||||
._dl_fpu_control = _FPU_DEFAULT,
|
._dl_fpu_control = _FPU_DEFAULT,
|
||||||
._dl_correct_cache_id = _DL_CACHE_DEFAULT_ID,
|
._dl_correct_cache_id = _DL_CACHE_DEFAULT_ID,
|
||||||
._dl_hwcap_mask = HWCAP_IMPORTANT,
|
._dl_hwcap_mask = HWCAP_IMPORTANT,
|
||||||
@ -996,6 +997,12 @@ of this helper program; chances are you did not intend to run this program.\n\
|
|||||||
GL(dl_rtld_map).l_prev = GL(dl_loaded);
|
GL(dl_rtld_map).l_prev = GL(dl_loaded);
|
||||||
++GL(dl_nloaded);
|
++GL(dl_nloaded);
|
||||||
|
|
||||||
|
/* If LD_USE_LOAD_BIAS env variable has not been seen, default
|
||||||
|
to not using bias for non-prelinked PIEs and libraries
|
||||||
|
and using it for executables or prelinked PIEs or libraries. */
|
||||||
|
if (GL(dl_use_load_bias) == (ElfW(Addr)) -2)
|
||||||
|
GL(dl_use_load_bias) = (GL(dl_loaded)->l_addr == 0) ? -1 : 0;
|
||||||
|
|
||||||
/* Set up the program header information for the dynamic linker
|
/* Set up the program header information for the dynamic linker
|
||||||
itself. It is needed in the dl_iterate_phdr() callbacks. */
|
itself. It is needed in the dl_iterate_phdr() callbacks. */
|
||||||
ElfW(Ehdr) *rtld_ehdr = (ElfW(Ehdr) *) GL(dl_rtld_map).l_map_start;
|
ElfW(Ehdr) *rtld_ehdr = (ElfW(Ehdr) *) GL(dl_rtld_map).l_map_start;
|
||||||
@ -1992,6 +1999,17 @@ process_envvars (enum mode *modep)
|
|||||||
GL(dl_dynamic_weak) = 1;
|
GL(dl_dynamic_weak) = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 13:
|
||||||
|
/* We might have some extra environment variable with length 13
|
||||||
|
to handle. */
|
||||||
|
#ifdef EXTRA_LD_ENVVARS_13
|
||||||
|
EXTRA_LD_ENVVARS_13
|
||||||
|
#endif
|
||||||
|
if (!INTUSE(__libc_enable_secure)
|
||||||
|
&& memcmp (envline, "USE_LOAD_BIAS", 13) == 0)
|
||||||
|
GL(dl_use_load_bias) = envline[14] == '1' ? -1 : 0;
|
||||||
|
break;
|
||||||
|
|
||||||
case 14:
|
case 14:
|
||||||
/* Where to place the profiling data file. */
|
/* Where to place the profiling data file. */
|
||||||
if (!INTUSE(__libc_enable_secure)
|
if (!INTUSE(__libc_enable_secure)
|
||||||
|
@ -1626,6 +1626,7 @@ ceil_test (void)
|
|||||||
TEST_f_f (ceil, M_PIl, 4.0);
|
TEST_f_f (ceil, M_PIl, 4.0);
|
||||||
TEST_f_f (ceil, -M_PIl, -3.0);
|
TEST_f_f (ceil, -M_PIl, -3.0);
|
||||||
TEST_f_f (ceil, 0.25, 1.0);
|
TEST_f_f (ceil, 0.25, 1.0);
|
||||||
|
TEST_f_f (ceil, -0.25, minus_zero);
|
||||||
|
|
||||||
END (ceil);
|
END (ceil);
|
||||||
}
|
}
|
||||||
@ -2572,6 +2573,9 @@ floor_test (void)
|
|||||||
TEST_f_f (floor, M_PIl, 3.0);
|
TEST_f_f (floor, M_PIl, 3.0);
|
||||||
TEST_f_f (floor, -M_PIl, -4.0);
|
TEST_f_f (floor, -M_PIl, -4.0);
|
||||||
|
|
||||||
|
TEST_f_f (floor, 0.25, 0.0);
|
||||||
|
TEST_f_f (floor, -0.25, -1.0);
|
||||||
|
|
||||||
END (floor);
|
END (floor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
13
posix/PTESTS
13
posix/PTESTS
@ -226,11 +226,18 @@
|
|||||||
1<EFBFBD>6<EFBFBD>a\(.*b\)<29>ababbbc<62>
|
1<EFBFBD>6<EFBFBD>a\(.*b\)<29>ababbbc<62>
|
||||||
1<EFBFBD>2<EFBFBD>a\(b*\)<29>ababbbc<62>
|
1<EFBFBD>2<EFBFBD>a\(b*\)<29>ababbbc<62>
|
||||||
1<EFBFBD>20<EFBFBD>a\(.*b\)c<>axcaxbbbcsxbbbbbbbbc<62>
|
1<EFBFBD>20<EFBFBD>a\(.*b\)c<>axcaxbbbcsxbbbbbbbbc<62>
|
||||||
# GA135
|
# GA135
|
||||||
|
1<EFBFBD>7<EFBFBD>\(a\(b\(c\(d\(e\)\)\)\)\)\4<>abcdededede<64>
|
||||||
|
#W POSIX does not really specify whether a\(b\)*c\1 matches acb.
|
||||||
|
#W back references are supposed to expand to the last match, but what
|
||||||
#W if there never was a match as in this case?
|
#W if there never was a match as in this case?
|
||||||
-1<>-1<>a\(b\)*c\1<>acb<63>
|
-1<>-1<>a\(b\)*c\1<>acb<63>
|
||||||
1<EFBFBD>11<EFBFBD>\(a\(b\(c\(d\(e\(f\(g\)h\(i\(j\)\)\)\)\)\)\)\)\9<>abcdefghijjk<6A>
|
1<EFBFBD>11<EFBFBD>\(a\(b\(c\(d\(e\(f\(g\)h\(i\(j\)\)\)\)\)\)\)\)\9<>abcdefghijjk<6A>
|
||||||
# GA136
|
# GA136
|
||||||
|
#W These two tests have the same problem as the test in GA135. No match
|
||||||
|
#W of a subexpression, why should the back reference be usable?
|
||||||
|
#W 1 2 a\(b\)*c\1 acb
|
||||||
|
#W 4 7 a\(b\(c\(d\(f\)*\)\)\)\4<>xYzabcdePQRST
|
||||||
-1<>-1<>a\(b\)*c\1<>acb<63>
|
-1<>-1<>a\(b\)*c\1<>acb<63>
|
||||||
-1<>-1<>a\(b\(c\(d\(f\)*\)\)\)\4<>xYzabcdePQRST<53>
|
-1<>-1<>a\(b\(c\(d\(f\)*\)\)\)\4<>xYzabcdePQRST<53>
|
||||||
# GA137
|
# GA137
|
||||||
|
@ -54,13 +54,22 @@ struct
|
|||||||
{ "(^|foo)bar", "(^|foo)bar", 0, 2, { { 0, 10 }, { -1, -1 } } },
|
{ "(^|foo)bar", "(^|foo)bar", 0, 2, { { 0, 10 }, { -1, -1 } } },
|
||||||
{ "(foo|^)bar", "(foo|^)bar", 0, 2, { { 0, 10 }, { -1, -1 } } },
|
{ "(foo|^)bar", "(foo|^)bar", 0, 2, { { 0, 10 }, { -1, -1 } } },
|
||||||
/* More tests on backreferences. */
|
/* More tests on backreferences. */
|
||||||
|
{ "()\\1", "x", REG_EXTENDED, 2, { { 0, 0 }, { 0, 0 } } },
|
||||||
|
{ "()x\\1", "x", REG_EXTENDED, 2, { { 0, 1 }, { 0, 0 } } },
|
||||||
{ "()\\1*\\1*", "", REG_EXTENDED, 2, { { 0, 0 }, { 0, 0 } } },
|
{ "()\\1*\\1*", "", REG_EXTENDED, 2, { { 0, 0 }, { 0, 0 } } },
|
||||||
{ "([0-9]).*\\1(a*)", "7;7a6", REG_EXTENDED, 3, { { 0, 4 }, { 0, 1 }, { 3, 4 } } },
|
{ "([0-9]).*\\1(a*)", "7;7a6", REG_EXTENDED, 3, { { 0, 4 }, { 0, 1 }, { 3, 4 } } },
|
||||||
{ "([0-9]).*\\1(a*)", "7;7a", REG_EXTENDED, 3, { { 0, 4 }, { 0, 1 }, { 3, 4 } } },
|
{ "([0-9]).*\\1(a*)", "7;7a", REG_EXTENDED, 3, { { 0, 4 }, { 0, 1 }, { 3, 4 } } },
|
||||||
|
{ "(b)()c\\1", "bcb", REG_EXTENDED, 3, { { 0, 3 }, { 0, 1 }, { 1, 1 } } },
|
||||||
|
{ "()(b)c\\2", "bcb", REG_EXTENDED, 3, { { 0, 3 }, { 0, 0 }, { 0, 1 } } },
|
||||||
|
{ "a(b)()c\\1", "abcb", REG_EXTENDED, 3, { { 0, 4 }, { 1, 2 }, { 2, 2 } } },
|
||||||
|
{ "a()(b)c\\2", "abcb", REG_EXTENDED, 3, { { 0, 4 }, { 1, 1 }, { 1, 2 } } },
|
||||||
#if 0
|
#if 0
|
||||||
/* XXX Not used since they fail so far. */
|
/* XXX Not used since they fail so far. */
|
||||||
{ "()(b)\\1c\\2", "bcb", REG_EXTENDED, 3, { { 0, 3 }, { 0, 0 }, { 1, 2 } } },
|
{ "()(b)\\1c\\2", "bcb", REG_EXTENDED, 3, { { 0, 3 }, { 0, 0 }, { 0, 1 } } },
|
||||||
{ "(b())\\2\\1", "bbbb", REG_EXTENDED, 3, { { 0, 2 }, { 0, 1 }, { 1, 1 } } },
|
{ "(b())\\2\\1", "bbbb", REG_EXTENDED, 3, { { 0, 2 }, { 0, 1 }, { 1, 1 } } },
|
||||||
|
{ "a()(b)\\1c\\2", "abcb", REG_EXTENDED, 3, { { 0, 4 }, { 1, 1 }, { 1, 2 } } },
|
||||||
|
{ "a()d(b)\\1c\\2", "adbcb", REG_EXTENDED, 3, { { 0, 5 }, { 1, 1 }, { 2, 3 } } },
|
||||||
|
{ "a(b())\\2\\1", "abbbb", REG_EXTENDED, 3, { { 0, 3 }, { 1, 2 }, { 2, 2 } } },
|
||||||
{ "(bb())\\2\\1", "bbbb", REG_EXTENDED, 3, { { 0, 4 }, { 0, 2 }, { 2, 2 } } },
|
{ "(bb())\\2\\1", "bbbb", REG_EXTENDED, 3, { { 0, 4 }, { 0, 2 }, { 2, 2 } } },
|
||||||
{ "^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?).?\\9\\8\\7\\6\\5\\4\\3\\2\\1$",
|
{ "^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?).?\\9\\8\\7\\6\\5\\4\\3\\2\\1$",
|
||||||
"level", REG_NOSUB | REG_EXTENDED, 0, { { -1, -1 } } },
|
"level", REG_NOSUB | REG_EXTENDED, 0, { { -1, -1 } } },
|
||||||
|
@ -271,7 +271,6 @@ main (void)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* XXX: This causes regex segfault. Disable for now.
|
|
||||||
res = re_search (®buf, tests[i].string, str_len, str_len, -str_len,
|
res = re_search (®buf, tests[i].string, str_len, str_len, -str_len,
|
||||||
NULL);
|
NULL);
|
||||||
if (res != tests[i].res)
|
if (res != tests[i].res)
|
||||||
@ -280,7 +279,7 @@ main (void)
|
|||||||
ret = 1;
|
ret = 1;
|
||||||
regfree (®buf);
|
regfree (®buf);
|
||||||
continue;
|
continue;
|
||||||
} */
|
}
|
||||||
regfree (®buf);
|
regfree (®buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -221,11 +221,18 @@
|
|||||||
{ 1, 20, "a\\(.*b\\)c", "axcaxbbbcsxbbbbbbbbc", },
|
{ 1, 20, "a\\(.*b\\)c", "axcaxbbbcsxbbbbbbbbc", },
|
||||||
{ 0, 0, "GA135", NULL, },
|
{ 0, 0, "GA135", NULL, },
|
||||||
{ 1, 7, "\\(a\\(b\\(c\\(d\\(e\\)\\)\\)\\)\\)\\4", "abcdededede", },
|
{ 1, 7, "\\(a\\(b\\(c\\(d\\(e\\)\\)\\)\\)\\)\\4", "abcdededede", },
|
||||||
{ 1, 2, "a\\(b\\)*c\\1", "acb", },
|
{ 0, 0, NULL, "POSIX does not really specify whether a\\(b\\)*c\\1 matches acb." },
|
||||||
|
{ 0, 0, NULL, "back references are supposed to expand to the last match, but what" },
|
||||||
|
{ 0, 0, NULL, "if there never was a match as in this case?" },
|
||||||
|
{ -1, -1, "a\\(b\\)*c\\1", "acb", },
|
||||||
{ 1, 11, "\\(a\\(b\\(c\\(d\\(e\\(f\\(g\\)h\\(i\\(j\\)\\)\\)\\)\\)\\)\\)\\)\\9", "abcdefghijjk", },
|
{ 1, 11, "\\(a\\(b\\(c\\(d\\(e\\(f\\(g\\)h\\(i\\(j\\)\\)\\)\\)\\)\\)\\)\\)\\9", "abcdefghijjk", },
|
||||||
{ 0, 0, "GA136", NULL, },
|
{ 0, 0, "GA136", NULL, },
|
||||||
{ 1, 2, "a\\(b\\)*c\\1", "acb", },
|
{ 0, 0, NULL, "These two tests have the same problem as the test in GA135. No match" },
|
||||||
{ 4, 7, "a\\(b\\(c\\(d\\(f\\)*\\)\\)\\)\\4", "xYzabcdePQRST", },
|
{ 0, 0, NULL, "of a subexpression, why should the back reference be usable?" },
|
||||||
|
{ 0, 0, NULL, "1 2 a\\(b\\)*c\\1 acb" },
|
||||||
|
{ 0, 0, NULL, "4 7 a\\(b\\(c\\(d\\(f\\)*\\)\\)\\)\\4<EFBFBD>xYzabcdePQRST" },
|
||||||
|
{ -1, -1, "a\\(b\\)*c\\1", "acb", },
|
||||||
|
{ -1, -1, "a\\(b\\(c\\(d\\(f\\)*\\)\\)\\)\\4", "xYzabcdePQRST", },
|
||||||
{ 0, 0, "GA137", NULL, },
|
{ 0, 0, "GA137", NULL, },
|
||||||
{ -2, -2, "\\(a\\(b\\)\\)\\3", "foo", },
|
{ -2, -2, "\\(a\\(b\\)\\)\\3", "foo", },
|
||||||
{ -2, -2, "\\(a\\(b\\)\\)\\(a\\(b\\)\\)\\5", "foo", },
|
{ -2, -2, "\\(a\\(b\\)\\)\\(a\\(b\\)\\)\\5", "foo", },
|
||||||
|
@ -3213,7 +3213,6 @@ parse_bracket_exp (regexp, dfa, token, syntax, err)
|
|||||||
int sbc_idx;
|
int sbc_idx;
|
||||||
/* Build a tree for complex bracket. */
|
/* Build a tree for complex bracket. */
|
||||||
dfa->has_mb_node = 1;
|
dfa->has_mb_node = 1;
|
||||||
dfa->has_plural_match = 1;
|
|
||||||
for (sbc_idx = 0; sbc_idx < BITSET_UINTS; ++sbc_idx)
|
for (sbc_idx = 0; sbc_idx < BITSET_UINTS; ++sbc_idx)
|
||||||
if (sbcset[sbc_idx])
|
if (sbcset[sbc_idx])
|
||||||
break;
|
break;
|
||||||
@ -3233,6 +3232,7 @@ parse_bracket_exp (regexp, dfa, token, syntax, err)
|
|||||||
goto parse_bracket_exp_espace;
|
goto parse_bracket_exp_espace;
|
||||||
/* Then join them by ALT node. */
|
/* Then join them by ALT node. */
|
||||||
alt_token.type = OP_ALT;
|
alt_token.type = OP_ALT;
|
||||||
|
dfa->has_plural_match = 1;
|
||||||
work_tree = re_dfa_add_tree_node (dfa, work_tree, mbc_tree, &alt_token);
|
work_tree = re_dfa_add_tree_node (dfa, work_tree, mbc_tree, &alt_token);
|
||||||
if (BE (mbc_tree != NULL, 1))
|
if (BE (mbc_tree != NULL, 1))
|
||||||
return work_tree;
|
return work_tree;
|
||||||
@ -3627,6 +3627,7 @@ build_charclass_op (dfa, trans, class_name, extra, not, err)
|
|||||||
goto build_word_op_espace;
|
goto build_word_op_espace;
|
||||||
/* Then join them by ALT node. */
|
/* Then join them by ALT node. */
|
||||||
alt_token.type = OP_ALT;
|
alt_token.type = OP_ALT;
|
||||||
|
dfa->has_plural_match = 1;
|
||||||
tree = re_dfa_add_tree_node (dfa, tree, mbc_tree, &alt_token);
|
tree = re_dfa_add_tree_node (dfa, tree, mbc_tree, &alt_token);
|
||||||
if (BE (mbc_tree != NULL, 1))
|
if (BE (mbc_tree != NULL, 1))
|
||||||
return tree;
|
return tree;
|
||||||
|
@ -55,7 +55,12 @@ re_string_allocate (pstr, str, len, init_len, trans, icase, dfa)
|
|||||||
const re_dfa_t *dfa;
|
const re_dfa_t *dfa;
|
||||||
{
|
{
|
||||||
reg_errcode_t ret;
|
reg_errcode_t ret;
|
||||||
int init_buf_len = (len + 1 < init_len) ? len + 1: init_len;
|
int init_buf_len;
|
||||||
|
|
||||||
|
/* Ensure at least one character fits into the buffers. */
|
||||||
|
if (init_len < dfa->mb_cur_max)
|
||||||
|
init_len = dfa->mb_cur_max;
|
||||||
|
init_buf_len = (len + 1 < init_len) ? len + 1: init_len;
|
||||||
re_string_construct_common (str, len, pstr, trans, icase, dfa);
|
re_string_construct_common (str, len, pstr, trans, icase, dfa);
|
||||||
pstr->stop = pstr->len;
|
pstr->stop = pstr->len;
|
||||||
|
|
||||||
@ -516,33 +521,33 @@ re_string_reconstruct (pstr, idx, eflags, newline)
|
|||||||
/* Special case UTF-8. Multi-byte chars start with any
|
/* Special case UTF-8. Multi-byte chars start with any
|
||||||
byte other than 0x80 - 0xbf. */
|
byte other than 0x80 - 0xbf. */
|
||||||
raw = pstr->raw_mbs + pstr->raw_mbs_idx;
|
raw = pstr->raw_mbs + pstr->raw_mbs_idx;
|
||||||
end = raw + (pstr->valid_len > offset - pstr->mb_cur_max
|
end = raw + (offset - pstr->mb_cur_max);
|
||||||
? pstr->valid_len : offset - pstr->mb_cur_max);
|
|
||||||
for (p = raw + offset - 1; p >= end; --p)
|
for (p = raw + offset - 1; p >= end; --p)
|
||||||
if ((*p & 0xc0) != 0x80)
|
if ((*p & 0xc0) != 0x80)
|
||||||
{
|
{
|
||||||
mbstate_t cur_state;
|
mbstate_t cur_state;
|
||||||
wchar_t wc2;
|
wchar_t wc2;
|
||||||
|
int mlen;
|
||||||
|
|
||||||
/* XXX Don't use mbrtowc, we know which conversion
|
/* XXX Don't use mbrtowc, we know which conversion
|
||||||
to use (UTF-8 -> UCS4). */
|
to use (UTF-8 -> UCS4). */
|
||||||
memset (&cur_state, 0, sizeof (cur_state));
|
memset (&cur_state, 0, sizeof (cur_state));
|
||||||
if (mbrtowc (&wc2, p, raw + offset - p, &cur_state)
|
mlen = mbrtowc (&wc2, p, raw + pstr->len - p,
|
||||||
== raw + offset - p)
|
&cur_state) - (raw + offset - p);
|
||||||
|
if (mlen >= 0)
|
||||||
{
|
{
|
||||||
memset (&pstr->cur_state, '\0',
|
memset (&pstr->cur_state, '\0',
|
||||||
sizeof (mbstate_t));
|
sizeof (mbstate_t));
|
||||||
|
pstr->valid_len = mlen;
|
||||||
wc = wc2;
|
wc = wc2;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (wc == WEOF)
|
if (wc == WEOF)
|
||||||
{
|
pstr->valid_len = re_string_skip_chars (pstr, idx, &wc) - idx;
|
||||||
pstr->valid_len = re_string_skip_chars (pstr, idx, &wc) - idx;
|
for (wcs_idx = 0; wcs_idx < pstr->valid_len; ++wcs_idx)
|
||||||
for (wcs_idx = 0; wcs_idx < pstr->valid_len; ++wcs_idx)
|
pstr->wcs[wcs_idx] = WEOF;
|
||||||
pstr->wcs[wcs_idx] = WEOF;
|
|
||||||
}
|
|
||||||
if (pstr->trans && wc <= 0xff)
|
if (pstr->trans && wc <= 0xff)
|
||||||
wc = pstr->trans[wc];
|
wc = pstr->trans[wc];
|
||||||
pstr->tip_context = (IS_WIDE_WORD_CHAR (wc) ? CONTEXT_WORD
|
pstr->tip_context = (IS_WIDE_WORD_CHAR (wc) ? CONTEXT_WORD
|
||||||
|
@ -620,7 +620,7 @@ re_search_internal (preg, string, length, start, range, stop, nmatch, pmatch,
|
|||||||
multi character collating element. */
|
multi character collating element. */
|
||||||
if (nmatch > 1 || dfa->has_mb_node)
|
if (nmatch > 1 || dfa->has_mb_node)
|
||||||
{
|
{
|
||||||
mctx.state_log = re_malloc (re_dfastate_t *, dfa->nodes_len + 1);
|
mctx.state_log = re_malloc (re_dfastate_t *, input.bufs_len + 1);
|
||||||
if (BE (mctx.state_log == NULL, 0))
|
if (BE (mctx.state_log == NULL, 0))
|
||||||
{
|
{
|
||||||
err = REG_ESPACE;
|
err = REG_ESPACE;
|
||||||
@ -766,6 +766,7 @@ re_search_internal (preg, string, length, start, range, stop, nmatch, pmatch,
|
|||||||
break;
|
break;
|
||||||
if (BE (err != REG_NOMATCH, 0))
|
if (BE (err != REG_NOMATCH, 0))
|
||||||
goto free_return;
|
goto free_return;
|
||||||
|
match_last = -1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
break; /* We found a match. */
|
break; /* We found a match. */
|
||||||
@ -785,7 +786,7 @@ re_search_internal (preg, string, length, start, range, stop, nmatch, pmatch,
|
|||||||
int reg_idx;
|
int reg_idx;
|
||||||
|
|
||||||
/* Initialize registers. */
|
/* Initialize registers. */
|
||||||
for (reg_idx = 0; reg_idx < nmatch; ++reg_idx)
|
for (reg_idx = 1; reg_idx < nmatch; ++reg_idx)
|
||||||
pmatch[reg_idx].rm_so = pmatch[reg_idx].rm_eo = -1;
|
pmatch[reg_idx].rm_so = pmatch[reg_idx].rm_eo = -1;
|
||||||
|
|
||||||
/* Set the points where matching start/end. */
|
/* Set the points where matching start/end. */
|
||||||
@ -801,7 +802,8 @@ re_search_internal (preg, string, length, start, range, stop, nmatch, pmatch,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* At last, add the offset to the each registers, since we slided
|
/* At last, add the offset to the each registers, since we slided
|
||||||
the buffers so that We can assume that the matching starts from 0. */
|
the buffers so that we could assume that the matching starts
|
||||||
|
from 0. */
|
||||||
for (reg_idx = 0; reg_idx < nmatch; ++reg_idx)
|
for (reg_idx = 0; reg_idx < nmatch; ++reg_idx)
|
||||||
if (pmatch[reg_idx].rm_so != -1)
|
if (pmatch[reg_idx].rm_so != -1)
|
||||||
{
|
{
|
||||||
@ -869,7 +871,8 @@ prune_impossible_nodes (preg, mctx)
|
|||||||
ret = REG_NOMATCH;
|
ret = REG_NOMATCH;
|
||||||
goto free_return;
|
goto free_return;
|
||||||
}
|
}
|
||||||
} while (!mctx->state_log[match_last]->halt);
|
} while (mctx->state_log[match_last] == NULL
|
||||||
|
|| !mctx->state_log[match_last]->halt);
|
||||||
halt_node = check_halt_state_context (preg,
|
halt_node = check_halt_state_context (preg,
|
||||||
mctx->state_log[match_last],
|
mctx->state_log[match_last],
|
||||||
mctx, match_last);
|
mctx, match_last);
|
||||||
@ -1236,7 +1239,7 @@ pop_fail_stack (fs, pidx, nregs, regs, eps_via_nodes)
|
|||||||
/* Set the positions where the subexpressions are starts/ends to registers
|
/* Set the positions where the subexpressions are starts/ends to registers
|
||||||
PMATCH.
|
PMATCH.
|
||||||
Note: We assume that pmatch[0] is already set, and
|
Note: We assume that pmatch[0] is already set, and
|
||||||
pmatch[i].rm_so == pmatch[i].rm_eo == -1 (i > 1). */
|
pmatch[i].rm_so == pmatch[i].rm_eo == -1 for 0 < i < nmatch. */
|
||||||
|
|
||||||
static reg_errcode_t
|
static reg_errcode_t
|
||||||
set_regs (preg, mctx, nmatch, pmatch, fl_backtrack)
|
set_regs (preg, mctx, nmatch, pmatch, fl_backtrack)
|
||||||
|
@ -119,8 +119,5 @@ main (int argc, char *argv[])
|
|||||||
|
|
||||||
printf ("\n%Zu tests, %d errors\n", cnt, errors);
|
printf ("\n%Zu tests, %d errors\n", cnt, errors);
|
||||||
|
|
||||||
/* We should return here the error status but since some tests are known
|
return errors != 0;
|
||||||
to fail this would only cause the libc testsuite to fail. */
|
|
||||||
//return errors != 0;
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
@ -337,6 +337,11 @@ struct rtld_global
|
|||||||
/* File descriptor to write debug messages to. */
|
/* File descriptor to write debug messages to. */
|
||||||
EXTERN int _dl_debug_fd;
|
EXTERN int _dl_debug_fd;
|
||||||
|
|
||||||
|
/* -1 if the dynamic linker should honor library load bias,
|
||||||
|
0 if not, -2 use the default (honor biases for normal
|
||||||
|
binaries, don't honor for PIEs). */
|
||||||
|
EXTERN ElfW(Addr) _dl_use_load_bias;
|
||||||
|
|
||||||
#ifdef _LIBC_REENTRANT
|
#ifdef _LIBC_REENTRANT
|
||||||
EXTERN void **(*_dl_error_catch_tsd) (void) __attribute__ ((const));
|
EXTERN void **(*_dl_error_catch_tsd) (void) __attribute__ ((const));
|
||||||
#endif
|
#endif
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
"LD_ORIGIN_PATH\0" \
|
"LD_ORIGIN_PATH\0" \
|
||||||
"LD_DEBUG_OUTPUT\0" \
|
"LD_DEBUG_OUTPUT\0" \
|
||||||
"LD_PROFILE\0" \
|
"LD_PROFILE\0" \
|
||||||
|
"LD_USE_LOAD_BIAS\0" \
|
||||||
"GCONV_PATH\0" \
|
"GCONV_PATH\0" \
|
||||||
"HOSTALIASES\0" \
|
"HOSTALIASES\0" \
|
||||||
"LOCALDOMAIN\0" \
|
"LOCALDOMAIN\0" \
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Optional code to distinguish library flavours.
|
/* Optional code to distinguish library flavours.
|
||||||
Copyright (C) 2001, 2002 Free Software Foundation, Inc.
|
Copyright (C) 2001, 2002, 2003 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>, 2001.
|
Contributed by Jakub Jelinek <jakub@redhat.com>, 2001.
|
||||||
|
|
||||||
@ -44,12 +44,12 @@ _dl_osversion_init (char *assume_kernel)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Recognizing extra environment variables. */
|
/* Recognizing extra environment variables. */
|
||||||
#define EXTRA_LD_ENVVARS EXTRA_LD_ENVVARS_LINUX
|
#define EXTRA_LD_ENVVARS_13 \
|
||||||
#define EXTRA_LD_ENVVARS_LINUX \
|
|
||||||
case 13: \
|
|
||||||
if (memcmp (envline, "ASSUME_KERNEL", 13) == 0) \
|
if (memcmp (envline, "ASSUME_KERNEL", 13) == 0) \
|
||||||
_dl_osversion_init (&envline[14]); \
|
{ \
|
||||||
break; \
|
_dl_osversion_init (&envline[14]); \
|
||||||
|
break; \
|
||||||
|
}
|
||||||
|
|
||||||
#define DL_OSVERSION_INIT \
|
#define DL_OSVERSION_INIT \
|
||||||
do { \
|
do { \
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Optional code to distinguish library flavours.
|
/* Optional code to distinguish library flavours.
|
||||||
Copyright (C) 1998, 2001, 2002 Free Software Foundation, Inc.
|
Copyright (C) 1998, 2001, 2002, 2003 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
|
||||||
|
|
||||||
@ -48,8 +48,7 @@
|
|||||||
while (0)
|
while (0)
|
||||||
|
|
||||||
/* Recognizing extra environment variables. */
|
/* Recognizing extra environment variables. */
|
||||||
#undef EXTRA_LD_ENVVARS
|
#define EXTRA_LD_ENVVARS \
|
||||||
#define EXTRA_LD_ENVVARS EXTRA_LD_ENVVARS_LINUX \
|
|
||||||
case 15: \
|
case 15: \
|
||||||
if (memcmp (envline, "LIBRARY_VERSION", 15) == 0) \
|
if (memcmp (envline, "LIBRARY_VERSION", 15) == 0) \
|
||||||
GL(dl_correct_cache_id) = envline[16] == '5' ? 2 : 3; \
|
GL(dl_correct_cache_id) = envline[16] == '5' ? 2 : 3; \
|
||||||
|
Reference in New Issue
Block a user