5.8.0-RC1 on SunOS 4!
Robin Barker [Tue, 9 Jul 2002 20:03:40 +0000 (21:03 +0100)]
Message-Id: <200207091903.UAA09531@tempest.npl.co.uk>

(the sprintf() spot in Dumper.xs fixed)

p4raw-id: //depot/perl@17450

ext/Data/Dumper/Dumper.xs
perl.c
util.c

index a129c3f..63b0f79 100644 (file)
@@ -152,7 +152,16 @@ esc_q_utf8(pTHX_ SV* sv, register char *src, register STRLEN slen)
             else if (k < 0x80)
                 *r++ = (char)k;
             else {
-                r += sprintf(r, "\\x{%"UVxf"}", k);
+             /* The return value of sprintf() is unportable.
+              * In modern systems it returns (int) the number of characters,
+              * but in older systems it might return (char*) the original
+              * buffer, or it might even be (void).  The easiest portable
+              * thing to do is probably use sprintf() in void context and
+              * then strlen(buffer) for the length.  The more proper way
+              * would of course be to figure out the prototype of sprintf.
+              * --jhi */
+               sprintf(r, "\\x{%"UVxf"}", k);
+                r += strlen(r);
             }
         }
         *r++ = '"';
diff --git a/perl.c b/perl.c
index 3c2a04f..f7131d0 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -431,7 +431,7 @@ perl_destruct(pTHXx)
     FREETMPS;
 
     /* Need to flush since END blocks can produce output */
-    PerlIO_flush((PerlIO*)NULL);
+    my_fflush_all();
 
     if (CALL_FPTR(PL_threadhook)(aTHX)) {
         /* Threads hook has vetoed further cleanup */
diff --git a/util.c b/util.c
index 2668755..623c44c 100644 (file)
--- a/util.c
+++ b/util.c
@@ -3391,6 +3391,7 @@ Perl_my_fflush_all(pTHX)
     return PerlIO_flush(NULL);
 #else
 # if defined(HAS__FWALK)
+    extern int fflush(FILE *);
     /* undocumented, unprototyped, but very useful BSDism */
     extern void _fwalk(int (*)(FILE *));
     _fwalk(&fflush);