diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2010-12-04 21:50:25 +0200 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2010-12-04 21:50:25 +0200 |
commit | 16458663c3bdf640e3352653ea94a89fb2949ad4 (patch) | |
tree | a5f4d91a8264affc34a2b9f91028419fb70535c2 /io.c | |
parent | 3c4a8232caabe74517277ec31adaca838251a256 (diff) | |
download | egawk-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.c | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -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; } |