summaryrefslogtreecommitdiff
path: root/libc/misc/regex/regexec.c
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-12-26 17:18:43 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-12-26 17:18:43 +0000
commit1c8c83e23b998a6b420b8b33a01077d16209b54f (patch)
tree2bdb55b9f93de0232b1e9c3d4a7ef675f361a682 /libc/misc/regex/regexec.c
parent63c18a8309ee4c333923de904a29dd7e81d2cdc7 (diff)
new regex: stop confusing ourself with _LIBC being undefined;
nuke one struct initializer which was invisibly becoming a memset - this improves speed by x2: test 0 pattern 0 '.?.?.?.?.?.?.?Log\.13' - 0.249795s + 0.133522s test 0 pattern 1 '(.?)(.?)(.?)(.?)(.?)(.?)(.?)Log\.13' - 0.360115s + 0.191959s text data bss dec hex filename - 515009 2731 15396 533136 82290 lib/libuClibc-0.9.30-svn.so + 514961 2727 15396 533084 8225c lib/libuClibc-0.9.30-svn.so
Diffstat (limited to 'libc/misc/regex/regexec.c')
-rw-r--r--libc/misc/regex/regexec.c50
1 files changed, 16 insertions, 34 deletions
diff --git a/libc/misc/regex/regexec.c b/libc/misc/regex/regexec.c
index 1e7e1c3b7..bdc7a29f3 100644
--- a/libc/misc/regex/regexec.c
+++ b/libc/misc/regex/regexec.c
@@ -185,11 +185,6 @@ static int build_trtable (const re_dfa_t *dfa,
static int check_node_accept_bytes (const re_dfa_t *dfa, int node_idx,
const re_string_t *input, int idx)
internal_function;
-# ifdef _LIBC
-static unsigned int find_collation_sequence_value (const unsigned char *mbs,
- size_t name_len)
- internal_function;
-# endif
#endif
static int group_nodes_into_DFAstates (const re_dfa_t *dfa,
const re_dfastate_t *state,
@@ -559,16 +554,14 @@ re_set_registers (bufp, regs, num_regs, starts, ends)
/* Entry points compatible with 4.2 BSD regex library. We don't define
them unless specifically requested. */
-#if defined _REGEX_RE_COMP || defined _LIBC || defined __UCLIBC__
+#if defined _REGEX_RE_COMP || defined __UCLIBC__
int
-# if defined _LIBC || defined __UCLIBC__
weak_function
-# endif
re_exec (const char *s)
{
return 0 == regexec (re_comp_buf, s, 0, NULL, 0);
}
-#endif /* _REGEX_RE_COMP */
+#endif
/* Internal entry point. */
@@ -596,19 +589,13 @@ re_search_internal (preg, string, length, start, range, stop, nmatch, pmatch,
int fl_longest_match, match_first, match_kind, match_last = -1;
int extra_nmatch;
int sb, ch;
-#if defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)
- re_match_context_t mctx = { .dfa = dfa };
-#else
re_match_context_t mctx;
-#endif
char *fastmap = (preg->fastmap != NULL && preg->fastmap_accurate
&& range && !preg->can_be_null) ? preg->fastmap : NULL;
RE_TRANSLATE_TYPE t = preg->translate;
-#if !(defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L))
memset (&mctx, '\0', sizeof (re_match_context_t));
mctx.dfa = dfa;
-#endif
extra_nmatch = (nmatch > preg->re_nsub) ? nmatch - (preg->re_nsub + 1) : 0;
nmatch -= extra_nmatch;
@@ -3754,12 +3741,12 @@ check_node_accept_bytes (const re_dfa_t *dfa, int node_idx,
if (node->type == COMPLEX_BRACKET)
{
const re_charset_t *cset = node->opr.mbcset;
-# ifdef _LIBC
+# if 0
const unsigned char *pin
= ((const unsigned char *) re_string_get_buffer (input) + str_idx);
int j;
uint32_t nrules;
-# endif /* _LIBC */
+# endif
int match_len = 0;
wchar_t wc = ((cset->nranges || cset->nchar_classes || cset->nmbchars)
? re_string_wchar_at (input, str_idx) : 0);
@@ -3782,7 +3769,7 @@ check_node_accept_bytes (const re_dfa_t *dfa, int node_idx,
}
}
-# ifdef _LIBC
+# if 0
nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
if (nrules != 0)
{
@@ -3871,15 +3858,13 @@ check_node_accept_bytes (const re_dfa_t *dfa, int node_idx,
}
}
else
-# endif /* _LIBC */
+# endif
{
/* match with range expression? */
-#if __GNUC__ >= 2
- wchar_t cmp_buf[] = {L'\0', L'\0', wc, L'\0', L'\0', L'\0'};
-#else
- wchar_t cmp_buf[] = {L'\0', L'\0', L'\0', L'\0', L'\0', L'\0'};
+ wchar_t cmp_buf[6];
+
+ memset (cmp_buf, 0, sizeof(cmp_buf));
cmp_buf[2] = wc;
-#endif
for (i = 0; i < cset->nranges; ++i)
{
cmp_buf[0] = cset->range_starts[i];
@@ -3892,21 +3877,18 @@ check_node_accept_bytes (const re_dfa_t *dfa, int node_idx,
}
}
}
- check_node_accept_bytes_match:
+
+ check_node_accept_bytes_match:
if (!cset->non_match)
return match_len;
- else
- {
- if (match_len > 0)
- return 0;
- else
- return (elem_len > char_len) ? elem_len : char_len;
- }
+ if (match_len > 0)
+ return 0;
+ return (elem_len > char_len) ? elem_len : char_len;
}
return 0;
}
-# ifdef _LIBC
+# if 0
static unsigned int
internal_function
find_collation_sequence_value (const unsigned char *mbs, size_t mbs_len)
@@ -3964,7 +3946,7 @@ find_collation_sequence_value (const unsigned char *mbs, size_t mbs_len)
return UINT_MAX;
}
}
-# endif /* _LIBC */
+# endif
#endif /* RE_ENABLE_I18N */
/* Check whether the node accepts the byte which is IDX-th