This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
mathoms.c,utf8.c: Update to use UTF8_CHK_SKIP
authorKarl Williamson <khw@cpan.org>
Sun, 3 Nov 2019 17:23:05 +0000 (10:23 -0700)
committerKarl Williamson <khw@cpan.org>
Sun, 3 Nov 2019 20:08:23 +0000 (13:08 -0700)
This new macro expands to what these did.  Update to use the common
code.

mathoms.c
utf8.c

index b340120..b0122f9 100644 (file)
--- a/mathoms.c
+++ b/mathoms.c
@@ -1196,8 +1196,9 @@ Perl_is_utf8_char(const U8 *s)
     PERL_ARGS_ASSERT_IS_UTF8_CHAR;
 
     /* Assumes we have enough space, which is why this is deprecated.  But the
-     * strnlen() makes it safe for the common case of NUL-terminated strings */
-    return isUTF8_CHAR(s, s + my_strnlen((char *) s, UTF8SKIP(s)));
+     * UTF8_CHK_SKIP(s)) makes it safe for the common case of NUL-terminated
+     * strings */
+    return isUTF8_CHAR(s, s + UTF8_CHK_SKIP(s));
 }
 
 /*
diff --git a/utf8.c b/utf8.c
index d73f8c3..9112145 100644 (file)
--- a/utf8.c
+++ b/utf8.c
@@ -5204,23 +5204,11 @@ Perl_utf8_to_uvchr(pTHX_ const U8 *s, STRLEN *retlen)
      * the character than there are in the input buffer, it can read past the
      * end.  But we can make it safe if the input string happens to be
      * NUL-terminated, as many strings in Perl are, by refusing to read past a
-     * NUL.  A NUL indicates the start of the next character anyway.  If the
-     * input isn't NUL-terminated, the function remains unsafe, as it always
-     * has been.
-     *
-     * An initial NUL has to be handled separately, but all ASCIIs can be
-     * handled the same way, speeding up this common case */
-
-    if (UTF8_IS_INVARIANT(*s)) {  /* Assumes 's' contains at least 1 byte */
-        if (retlen) {
-            *retlen = 1;
-        }
-        return (UV) *s;
-    }
+     * NUL, which is what UTF8_CHK_SKIP() does.  A NUL indicates the start of
+     * the next character anyway.  If the input isn't NUL-terminated, the
+     * function remains unsafe, as it always has been. */
 
-    return utf8_to_uvchr_buf(s,
-                             s + my_strnlen((char *) s, UTF8SKIP(s)),
-                             retlen);
+    return utf8_to_uvchr_buf(s, s + UTF8_CHK_SKIP(s), retlen);
 }
 
 /*