projects
/
gnulib.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
stdlib: sort witness names
[gnulib.git]
/
lib
/
regexec.c
diff --git
a/lib/regexec.c
b/lib/regexec.c
index
7c186aa
..
21a8166
100644
(file)
--- a/
lib/regexec.c
+++ b/
lib/regexec.c
@@
-1,5
+1,6
@@
/* Extended regular expression matching and search library.
/* Extended regular expression matching and search library.
- Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+ Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
This file is part of the GNU C Library.
Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
@@
-221,10
+222,10
@@
static reg_errcode_t extend_buffers (re_match_context_t *mctx)
int
regexec (preg, string, nmatch, pmatch, eflags)
int
regexec (preg, string, nmatch, pmatch, eflags)
- const regex_t *_
_restrict
preg;
- const char *_
_restrict
string;
+ const regex_t *_
Restrict_
preg;
+ const char *_
Restrict_
string;
size_t nmatch;
size_t nmatch;
- regmatch_t pmatch[];
+ regmatch_t pmatch[
_Restrict_arr_
];
int eflags;
{
reg_errcode_t err;
int eflags;
{
reg_errcode_t err;
@@
-267,8
+268,8
@@
__typeof__ (__regexec) __compat_regexec;
int
attribute_compat_text_section
int
attribute_compat_text_section
-__compat_regexec (const regex_t *_
_restrict
preg,
- const char *_
_restrict
string, size_t nmatch,
+__compat_regexec (const regex_t *_
Restrict_
preg,
+ const char *_
Restrict_
string, size_t nmatch,
regmatch_t pmatch[], int eflags)
{
return regexec (preg, string, nmatch, pmatch,
regmatch_t pmatch[], int eflags)
{
return regexec (preg, string, nmatch, pmatch,
@@
-700,7
+701,8
@@
re_search_internal (const regex_t *preg,
fl_longest_match = (nmatch != 0 || dfa->nbackref);
err = re_string_allocate (&mctx.input, string, length, dfa->nodes_len + 1,
fl_longest_match = (nmatch != 0 || dfa->nbackref);
err = re_string_allocate (&mctx.input, string, length, dfa->nodes_len + 1,
- preg->translate, preg->syntax & RE_ICASE, dfa);
+ preg->translate, (preg->syntax & RE_ICASE) != 0,
+ dfa);
if (BE (err != REG_NOERROR, 0))
goto free_return;
mctx.input.stop = stop;
if (BE (err != REG_NOERROR, 0))
goto free_return;
mctx.input.stop = stop;
@@
-1043,6
+1045,11
@@
prune_impossible_nodes (re_match_context_t *mctx)
re_node_set_free (&sctx.limits);
if (BE (ret != REG_NOERROR, 0))
goto free_return;
re_node_set_free (&sctx.limits);
if (BE (ret != REG_NOERROR, 0))
goto free_return;
+ if (sifted_states[0] == NULL)
+ {
+ ret = REG_NOMATCH;
+ goto free_return;
+ }
}
re_free (mctx->state_log);
mctx->state_log = sifted_states;
}
re_free (mctx->state_log);
mctx->state_log = sifted_states;
@@
-2338,7
+2345,7
@@
transit_state (reg_errcode_t *err, re_match_context_t *mctx,
}
/* Update the state_log if we need */
}
/* Update the state_log if we need */
-re_dfastate_t *
+
static
re_dfastate_t *
internal_function
merge_state_with_log (reg_errcode_t *err, re_match_context_t *mctx,
re_dfastate_t *next_state)
internal_function
merge_state_with_log (reg_errcode_t *err, re_match_context_t *mctx,
re_dfastate_t *next_state)
@@
-3077,7
+3084,9
@@
check_arrival_add_next_nodes (re_match_context_t *mctx, Idx str_idx,
const re_dfa_t *const dfa = mctx->dfa;
bool ok;
Idx cur_idx;
const re_dfa_t *const dfa = mctx->dfa;
bool ok;
Idx cur_idx;
+#ifdef RE_ENABLE_I18N
reg_errcode_t err = REG_NOERROR;
reg_errcode_t err = REG_NOERROR;
+#endif
re_node_set union_set;
re_node_set_init_empty (&union_set);
for (cur_idx = 0; cur_idx < cur_nodes->nelem; ++cur_idx)
re_node_set union_set;
re_node_set_init_empty (&union_set);
for (cur_idx = 0; cur_idx < cur_nodes->nelem; ++cur_idx)
@@
-3466,7
+3475,7
@@
out_free:
CONTEXT_NEWLINE);
if (BE (dest_states_nl[i] == NULL && err != REG_NOERROR, 0))
goto out_free;
CONTEXT_NEWLINE);
if (BE (dest_states_nl[i] == NULL && err != REG_NOERROR, 0))
goto out_free;
- }
+ }
else
{
dest_states_word[i] = dest_states[i];
else
{
dest_states_word[i] = dest_states[i];