Forgotten deMANIFESTation.
[p5sagit/p5-mst-13.2.git] / util.c
diff --git a/util.c b/util.c
index 4dc8676..0e5c519 100644 (file)
--- a/util.c
+++ b/util.c
@@ -3509,30 +3509,32 @@ Perl_ebcdic_control(pTHX_ int ch)
 }
 #endif
 
-/* XXX struct tm on some systems (SunOS4/BSD) contains extra (non POSIX)
- * fields for which we don't have Configure support yet:
- *   char *tm_zone;   -- abbreviation of timezone name
- *   long tm_gmtoff;  -- offset from GMT in seconds
- * To workaround core dumps from the uninitialised tm_zone we get the
+/* To workaround core dumps from the uninitialised tm_zone we get the
  * system to give us a reasonable struct to copy.  This fix means that
  * strftime uses the tm_zone and tm_gmtoff values returned by
  * localtime(time()). That should give the desired result most of the
  * time. But probably not always!
  *
- * This is a temporary workaround to be removed once Configure
- * support is added and NETaa14816 is considered in full.
- * It does not address tzname aspects of NETaa14816.
+ * This does not address tzname aspects of NETaa14816.
+ *
  */
+
 #ifdef HAS_GNULIBC
 # ifndef STRUCT_TM_HASZONE
 #    define STRUCT_TM_HASZONE
 # endif
 #endif
 
+#ifdef STRUCT_TM_HASZONE /* Backward compat */
+# ifndef HAS_TM_TM_ZONE
+#    define HAS_TM_TM_ZONE
+# endif
+#endif
+
 void
 Perl_init_tm(pTHX_ struct tm *ptm)     /* see mktime, strftime and asctime */
 {
-#ifdef STRUCT_TM_HASZONE
+#ifdef HAS_TM_TM_ZONE
     Time_t now;
     (void)time(&now);
     Copy(localtime(&now), ptm, 1, struct tm);
@@ -4366,16 +4368,20 @@ Perl_memcmp_byte_utf8(pTHX_ char *sb, STRLEN lbyte, char *su, STRLEN lutf)
     while (sbyte < ebyte) {
        if (sutf >= eutf)
            return 1;                   /* utf one shorter */
-       if (*sbyte < 128) {
+       if (NATIVE_IS_INVARIANT(*sbyte)) {
            if (*sbyte != *sutf)
                return *sbyte - *sutf;
            sbyte++; sutf++;    /* CONTINUE */
-       } else if ((*sutf & 0x3F) == (*sbyte >> 6)) { /* byte 0xFF: 0xC3 BF */
-           if ((sutf[1] & 0x3F) != (*sbyte & 0x3F))
-               return (*sbyte & 0x3F) - (*sutf & 0x3F);
+       } else if ((*sutf & UTF_CONTINUATION_MASK) ==
+                   (*sbyte >> UTF_ACCUMULATION_SHIFT)) {
+           if ((sutf[1] & UTF_CONTINUATION_MASK) !=
+                (*sbyte & UTF_CONTINUATION_MASK))
+               return (*sbyte & UTF_CONTINUATION_MASK) -
+                       (*sutf & UTF_CONTINUATION_MASK);
            sbyte++, sutf += 2; /* CONTINUE */
        } else
-           return (*sbyte >> 6) - (*sutf & 0x3F);
+           return (*sbyte >> UTF_ACCUMULATION_SHIFT) -
+                   (*sutf & UTF_CONTINUATION_MASK);
     }
     if (sutf >= eutf)
        return 0;