This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
PATCH: [perl #132516] locale.c compiler warning
authorKarl Williamson <khw@cpan.org>
Thu, 30 Nov 2017 03:22:45 +0000 (20:22 -0700)
committerKarl Williamson <khw@cpan.org>
Thu, 30 Nov 2017 03:30:25 +0000 (20:30 -0700)
This is a problem on Darwin due to a bug there.  MB_CUR_MAX, according
to Tony Cook, is supposed to be an unsigned value according to the C99
standard, and it is in Linux.  But Darwin declares it to be signed, even
though the minimum value it can reach is +1.  Maybe other systems have
the same defect.  But there is a simple fix, just cast it to unsigned.

locale.c

index 79ecaa3..cb47662 100644 (file)
--- a/locale.c
+++ b/locale.c
@@ -2939,7 +2939,7 @@ Perl__is_cur_LC_category_utf8(pTHX_ int category)
          * Unicode code point.  Since UTF-8 is the only non-single byte
          * encoding we handle, we just say any such encoding is UTF-8, and if
          * turns out to be wrong, other things will fail */
-        is_utf8 = MB_CUR_MAX >= STRLENs(MAX_UNICODE_UTF8);
+        is_utf8 = (unsigned) MB_CUR_MAX >= STRLENs(MAX_UNICODE_UTF8);
 
         DEBUG_L(PerlIO_printf(Perl_debug_log,
                               "\tMB_CUR_MAX=%d; ?UTF8 locale=%d\n",