I was mistaken. Borland and gcc do have snprintf() and vsnprintf()
[p5sagit/p5-mst-13.2.git] / perlio.c
index 299d830..24f419f 100644 (file)
--- a/perlio.c
+++ b/perlio.c
@@ -475,7 +475,11 @@ PerlIO_debug(const char *fmt, ...)
        /* Use fixed buffer as sv_catpvf etc. needs SVs */
        char buffer[1024];
        const STRLEN len = my_sprintf(buffer, "%.40s:%" IVdf " ", s ? s : "(none)", (IV) CopLINE(PL_curcop));
+# ifdef USE_VSNPRINTF
+       const STRLEN len2 = vsnprintf(buffer+len, sizeof(buffer) - len, fmt, ap);
+# else
        const STRLEN len2 = vsprintf(buffer+len, fmt, ap);
+# endif /* USE_VSNPRINTF */
        PerlLIO_write(PL_perlio_debug_fd, buffer, len + len2);
 #else
        const char *s = CopFILE(PL_curcop);
@@ -2267,6 +2271,7 @@ perl_mutex PerlIO_mutex;
 /* Must be called with PerlIO_mutex locked.  */
 static void
 S_more_refcounted_fds(pTHX_ const int new_fd) {
+    dVAR;
     const int old_max = PL_perlio_fd_refcnt_size;
     const int new_max = 16 + (new_fd & ~15);
     int *new_array;
@@ -2296,7 +2301,9 @@ S_more_refcounted_fds(pTHX_ const int new_fd) {
     PL_perlio_fd_refcnt_size = new_max;
     PL_perlio_fd_refcnt = new_array;
 
-    PerlIO_debug("Zeroing %p, %d\n", new_array + old_max, new_max - old_max);
+    PerlIO_debug("Zeroing %p, %d\n",
+                (void*)(new_array + old_max),
+                new_max - old_max);
 
     Zero(new_array + old_max, new_max - old_max, int);
 }
@@ -5135,7 +5142,11 @@ int
 PerlIO_vsprintf(char *s, int n, const char *fmt, va_list ap)
 {
     dVAR;
+#ifdef USE_VSNPRINTF
+    const int val = vsnprintf(s, n > 0 ? n : 0, fmt, ap);
+#else
     const int val = vsprintf(s, fmt, ap);
+#endif /* #ifdef USE_VSNPRINTF */
     if (n >= 0) {
        if (strlen(s) >= (STRLEN) n) {
            dTHX;