diff options
author | Ulrich Drepper <drepper@redhat.com> | 2003-11-19 07:18:32 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2003-11-19 07:18:32 +0000 |
commit | 3ee363e23115e63f8dcc34bf5b7bd5e1a084635c (patch) | |
tree | c825366f4549a27f0d4c44301821fa5b0b208990 /posix | |
parent | c9002c1b7a648fe49b8472d6dc6724c78fa1329f (diff) | |
download | glibc-3ee363e23115e63f8dcc34bf5b7bd5e1a084635c.tar.gz |
Update.
2003-11-18 Ulrich Drepper <drepper@redhat.com>
* posix/regexec.c (get_subexp): Adter calling get_subexp_seb
reload buf and bkref_str. Little optimization by avoiding memcmp.
2003-11-14 David Mosberger <davidm@hpl.hp.com>
Diffstat (limited to 'posix')
-rw-r--r-- | posix/regex_internal.c | 2 | ||||
-rw-r--r-- | posix/regexec.c | 9 |
2 files changed, 9 insertions, 2 deletions
diff --git a/posix/regex_internal.c b/posix/regex_internal.c index c1605a0393..1da5f7040a 100644 --- a/posix/regex_internal.c +++ b/posix/regex_internal.c @@ -519,6 +519,8 @@ re_string_reconstruct (pstr, idx, eflags, newline) mbstate_t cur_state; wchar_t wc2; + /* XXX Don't use mbrtowc, we know which conversion + to use (UTF-8 -> UCS4). */ memset (&cur_state, 0, sizeof (cur_state)); if (mbrtowc (&wc2, p, raw + offset - p, &cur_state) == raw + offset - p) diff --git a/posix/regexec.c b/posix/regexec.c index 6f4448a078..03b97e883c 100644 --- a/posix/regexec.c +++ b/posix/regexec.c @@ -2550,6 +2550,12 @@ get_subexp (preg, mctx, bkref_node, bkref_str_idx) sl_str += sl_str_diff; err = get_subexp_sub (preg, mctx, sub_top, sub_last, bkref_node, bkref_str_idx); + + /* Reload buf and bkref_str, since the preceding call might + have reallocated the buffer. */ + buf = (char *) re_string_get_buffer (mctx->input); + bkref_str = buf + bkref_str_idx; + if (err == REG_NOMATCH) continue; if (BE (err != REG_NOERROR, 0)) @@ -2567,8 +2573,7 @@ get_subexp (preg, mctx, bkref_node, bkref_str_idx) sl_str_off = sl_str - sub_top->str_idx; /* The matched string by the sub expression match with the substring at the back reference? */ - if (sl_str_off > 0 - && memcmp (bkref_str++, buf + sl_str - 1, 1) != 0) + if (sl_str_off > 0 && *bkref_str++ != buf[sl_str - 1]) break; /* We don't need to search this sub expression any more. */ if (mctx->state_log[sl_str] == NULL) continue; |