- dVAR;
- IV off = 0;
-
- /* Note: cannot use UTF8_IS_...() too eagerly here since e.g.
- * the bitops (especially ~) can create illegal UTF-8.
- * In other words: in Perl UTF-8 is not just for Unicode. */
-
- if (a < b) {
- while (a < b) {
- const U8 c = UTF8SKIP(a);
- if (b - a < c)
- goto warn_and_return;
- a += c;
- off--;
- }
- }
- else {
- while (b < a) {
- const U8 c = UTF8SKIP(b);
-
- if (a - b < c) {
- warn_and_return:
- if (ckWARN_d(WARN_UTF8)) {
- if (PL_op)
- Perl_warner(aTHX_ packWARN(WARN_UTF8),
- "%s in %s", unees, OP_DESC(PL_op));
- else
- Perl_warner(aTHX_ packWARN(WARN_UTF8), unees);
- }
- return off;
- }
- b += c;
- off++;
- }
- }
-
- return off;