aboutsummaryrefslogtreecommitdiffstats
path: root/io.c
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2010-12-04 21:50:25 +0200
committerArnold D. Robbins <arnold@skeeve.com>2010-12-04 21:50:25 +0200
commit16458663c3bdf640e3352653ea94a89fb2949ad4 (patch)
treea5f4d91a8264affc34a2b9f91028419fb70535c2 /io.c
parent3c4a8232caabe74517277ec31adaca838251a256 (diff)
downloadegawk-16458663c3bdf640e3352653ea94a89fb2949ad4.tar.gz
egawk-16458663c3bdf640e3352653ea94a89fb2949ad4.tar.bz2
egawk-16458663c3bdf640e3352653ea94a89fb2949ad4.zip
Speed up single byte cases. See ChangeLog.
Diffstat (limited to 'io.c')
-rw-r--r--io.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/io.c b/io.c
index 54fa46bb..efad6af3 100644
--- a/io.c
+++ b/io.c
@@ -2684,13 +2684,19 @@ rs1scan(IOBUF *iop, struct recmatch *recm, SCANSTATE *state)
if (rs != '\n' && gawk_mb_cur_max > 1) {
int len = iop->dataend - bp;
int found = 0;
+
memset(&mbs, 0, sizeof(mbstate_t));
do {
if (*bp == rs)
found = 1;
- mbclen = mbrlen(bp, len, &mbs);
- if ((mbclen == 1) || (mbclen == (size_t) -1)
- || (mbclen == (size_t) -2) || (mbclen == 0)) {
+ if (is_valid_character(*bp))
+ mbclen = 1;
+ else
+ mbclen = mbrlen(bp, len, &mbs);
+ if ( (mbclen == 1)
+ || (mbclen == (size_t) -1)
+ || (mbclen == (size_t) -2)
+ || (mbclen == 0)) {
/* We treat it as a singlebyte character. */
mbclen = 1;
}