diff options
author | Nicholas Clark <nick@ccl4.org> | 2010-07-11 16:49:29 +0100 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2010-07-11 16:49:29 +0100 |
commit | 503752a16bf16b90ff6c073c4bd5d818e68a2e2a (patch) | |
tree | a7f1750648af9b068d84084f5b5024fc2ce76871 /sv.c | |
parent | 65cccc5e92d46159b5887e72094aab44ee260ea3 (diff) | |
download | perl-503752a16bf16b90ff6c073c4bd5d818e68a2e2a.tar.gz |
In S_sv_pos_u2b_midway, inline the call to S_sv_pos_u2b_forwards.
Diffstat (limited to 'sv.c')
-rw-r--r-- | sv.c | 11 |
1 files changed, 9 insertions, 2 deletions
@@ -6110,7 +6110,7 @@ S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send, the passed in UTF-8 offset. */ static STRLEN S_sv_pos_u2b_midway(const U8 *const start, const U8 *send, - const STRLEN uoffset, const STRLEN uend) + STRLEN uoffset, const STRLEN uend) { STRLEN backw = uend - uoffset; @@ -6120,7 +6120,14 @@ S_sv_pos_u2b_midway(const U8 *const start, const U8 *send, /* The assumption is that going forwards is twice the speed of going forward (that's where the 2 * backw comes from). (The real figure of course depends on the UTF-8 data.) */ - return sv_pos_u2b_forwards(start, send, uoffset); + const U8 *s = start; + + while (s < send && uoffset--) + s += UTF8SKIP(s); + assert (s <= send); + if (s > send) + s = send; + return s - start; } while (backw--) { |