diff --git a/ChangeLog b/ChangeLog index 49945b1d2b..daecc9aa94 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2003-01-16 Jakub Jelinek + + * posix/regcomp.c (parse_bracket_exp): If build_charclass fails, + set *err to the returned error, not to REG_ESPACE unconditionally. + (build_word_op): Likewise. + * posix/Makefile (tests): Add bug-regex16. + * posix/bug-regex16.c: New test. + 2003-01-16 Jakub Jelinek * elf/dl-load.c (_dl_map_object_from_fd): Use diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog index 990ebb3bae..93023e607a 100644 --- a/linuxthreads/ChangeLog +++ b/linuxthreads/ChangeLog @@ -1,3 +1,11 @@ +2003-01-15 Jakub Jelinek + + * sysdeps/ia64/tls.h (tcbhead_t): Use the TLS ABI required layout + if USE_TLS only. + (NONTLS_INIT_TP): Revert last change. + * sysdeps/ia64/tcb-offsets.sym (MULTIPLE_THREADS_OFFSET): Define to + offsetof (tcbhead_t, multiple_threads) if USE_TLS not defined. + 2003-01-16 Jakub Jelinek * pthread.c (_pthread_initialize_minimal): Use diff --git a/posix/Makefile b/posix/Makefile index 90129d7685..6b2830ad8d 100644 --- a/posix/Makefile +++ b/posix/Makefile @@ -75,7 +75,7 @@ tests := tstgetopt testfnm runtests runptests \ tst-chmod bug-regex1 bug-regex2 bug-regex3 bug-regex4 \ tst-gnuglob tst-regex bug-regex5 bug-regex6 bug-regex7 \ bug-regex8 bug-regex9 bug-regex10 bug-regex11 bug-regex12 \ - bug-regex13 bug-regex14 bug-regex15 + bug-regex13 bug-regex14 bug-regex15 bug-regex16 ifeq (yes,$(build-shared)) test-srcs := globtest tests += wordexp-test tst-exec tst-spawn diff --git a/posix/bug-regex16.c b/posix/bug-regex16.c new file mode 100644 index 0000000000..1e41ccb718 --- /dev/null +++ b/posix/bug-regex16.c @@ -0,0 +1,35 @@ +/* Test re_compile_pattern error messages. */ + +#include +#include +#include + +int +main (void) +{ + struct re_pattern_buffer re; + const char *s; + int ret = 0; + + re_set_syntax (RE_SYNTAX_POSIX_EGREP); + memset (&re, 0, sizeof (re)); + s = re_compile_pattern ("[[.invalid_collating_symbol.]]", 30, &re); + if (s == NULL || strcmp (s, "Invalid collation character")) + { + printf ("re_compile_pattern returned %s\n", s); + ret = 1; + } + s = re_compile_pattern ("[[=invalid_equivalence_class=]]", 31, &re); + if (s == NULL || strcmp (s, "Invalid collation character")) + { + printf ("re_compile_pattern returned %s\n", s); + ret = 1; + } + s = re_compile_pattern ("[[:invalid_character_class:]]", 29, &re); + if (s == NULL || strcmp (s, "Invalid character class name")) + { + printf ("re_compile_pattern returned %s\n", s); + ret = 1; + } + return ret; +} diff --git a/posix/regcomp.c b/posix/regcomp.c index 12724e4605..e36383b92d 100644 --- a/posix/regcomp.c +++ b/posix/regcomp.c @@ -2993,13 +2993,13 @@ parse_bracket_exp (regexp, dfa, token, syntax, err) goto parse_bracket_exp_free_return; break; case CHAR_CLASS: - ret = build_charclass (sbcset, + *err = build_charclass (sbcset, #ifdef RE_ENABLE_I18N - mbcset, &char_class_alloc, + mbcset, &char_class_alloc, #endif /* RE_ENABLE_I18N */ - start_elem.opr.name, syntax); - if (BE (ret != REG_NOERROR, 0)) - goto parse_bracket_exp_espace; + start_elem.opr.name, syntax); + if (BE (*err != REG_NOERROR, 0)) + goto parse_bracket_exp_free_return; break; default: assert (0); @@ -3380,7 +3380,7 @@ build_word_op (dfa, not, err) #ifdef RE_ENABLE_I18N free_charset (mbcset); #endif /* RE_ENABLE_I18N */ - *err = REG_ESPACE; + *err = ret; return NULL; } /* \w match '_' also. */