Integrate mainline.
[p5sagit/p5-mst-13.2.git] / util.c
diff --git a/util.c b/util.c
index 4dc8676..9109f8c 100644 (file)
--- a/util.c
+++ b/util.c
@@ -3445,25 +3445,25 @@ Perl_report_evil_fh(pTHX_ GV *gv, IO *io, I32 op)
 
     if (op == OP_phoney_OUTPUT_ONLY || op == OP_phoney_INPUT_ONLY) {
        if (name && *name)
-           Perl_warner(aTHX_ WARN_IO, "Filehandle %s opened only for %sput",
+           Perl_warner(aTHX_ packWARN(WARN_IO), "Filehandle %s opened only for %sput",
                        name,
                        (op == OP_phoney_INPUT_ONLY ? "in" : "out"));
        else
-           Perl_warner(aTHX_ WARN_IO, "Filehandle opened only for %sput",
+           Perl_warner(aTHX_ packWARN(WARN_IO), "Filehandle opened only for %sput",
                        (op == OP_phoney_INPUT_ONLY ? "in" : "out"));
     } else if (name && *name) {
-       Perl_warner(aTHX_ warn_type,
+       Perl_warner(aTHX_ packWARN(warn_type),
                    "%s%s on %s %s %s", func, pars, vile, type, name);
        if (io && IoDIRP(io) && !(IoFLAGS(io) & IOf_FAKE_DIRP))
-           Perl_warner(aTHX_ warn_type,
+           Perl_warner(aTHX_ packWARN(warn_type),
                        "\t(Are you trying to call %s%s on dirhandle %s?)\n",
                        func, pars, name);
     }
     else {
-       Perl_warner(aTHX_ warn_type,
+       Perl_warner(aTHX_ packWARN(warn_type),
                    "%s%s on %s %s", func, pars, vile, type);
        if (gv && io && IoDIRP(io) && !(IoFLAGS(io) & IOf_FAKE_DIRP))
-           Perl_warner(aTHX_ warn_type,
+           Perl_warner(aTHX_ packWARN(warn_type),
                        "\t(Are you trying to call %s%s on dirhandle?)\n",
                        func, pars);
     }
@@ -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);
@@ -4024,7 +4026,7 @@ Perl_new_vstring(pTHX_ char *s, SV *sv)
                      rev += (*end - '0') * mult;
                      mult *= 10;
                      if (orev > rev && ckWARN_d(WARN_OVERFLOW))
-                          Perl_warner(aTHX_ WARN_OVERFLOW,
+                          Perl_warner(aTHX_ packWARN(WARN_OVERFLOW),
                                       "Integer overflow in decimal number");
                 }
            }
@@ -4346,38 +4348,14 @@ Perl_sv_nounlocking(pTHX_ SV *sv)
 {
 }
 
-/*
-=for apidoc memcmp_byte_utf8
+void
+Perl_reentrant_init(pTHX)
+{
+#ifdef USE_REENTRANT_API
+    New(31337, PL_reentrant_buffer, 1, REENTBUF);
+    New(31337, PL_reentrant_buffer->tmbuf, 1, struct tm);
+#endif
+}
 
-Similar to memcmp(), but the first string is with bytes, the second
-with utf8.  Takes into account that the lengths may be different.
 
-=cut
-*/
 
-int
-Perl_memcmp_byte_utf8(pTHX_ char *sb, STRLEN lbyte, char *su, STRLEN lutf)
-{
-    U8 *sbyte = (U8*)sb;
-    U8 *sutf  = (U8*)su;
-    U8 *ebyte = sbyte + lbyte;
-    U8 *eutf  = sutf  + lutf;
-
-    while (sbyte < ebyte) {
-       if (sutf >= eutf)
-           return 1;                   /* utf one shorter */
-       if (*sbyte < 128) {
-           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);
-           sbyte++, sutf += 2; /* CONTINUE */
-       } else
-           return (*sbyte >> 6) - (*sutf & 0x3F);
-    }
-    if (sutf >= eutf)
-       return 0;
-    return -1;                         /* byte one shorter */
-}