This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Mention sv_gets as the Perl-ish fgets-ish API.
[perl5.git] / t / porting / libperl.t
index d272ffe..f62b80d 100644 (file)
@@ -206,7 +206,7 @@ sub nm_parse_gnu {
                 # Bb: uninitialized data (bss)
                 # Ss: uninitialized data "for small objects"
                 $symbols->{data}{bss}{$1}{$symbols->{o}}++;
                 # Bb: uninitialized data (bss)
                 # Ss: uninitialized data "for small objects"
                 $symbols->{data}{bss}{$1}{$symbols->{o}}++;
-            } elsif (/^0{16} D _LIB_VERSION$/) {
+            } elsif (/^D _LIB_VERSION$/) {
                 # Skip the _LIB_VERSION (not ours, probably libm)
             } elsif (/^[DdGg] (\w+)$/) {
                 # Dd: initialized data
                 # Skip the _LIB_VERSION (not ours, probably libm)
             } elsif (/^[DdGg] (\w+)$/) {
                 # Dd: initialized data
@@ -455,14 +455,24 @@ for my $symbol (sort keys %expected) {
     }
     my @o = exists $symbols{undef}{$symbol} ?
         sort keys %{ $symbols{undef}{$symbol} } : ();
     }
     my @o = exists $symbols{undef}{$symbol} ?
         sort keys %{ $symbols{undef}{$symbol} } : ();
-    ok(@o, "uses $symbol (@o)");
+    # In some FreeBSD versions memcmp disappears (compiler inlining?).
+    if (($^O eq 'freebsd' ||
+         (defined $fake_style && $fake_style eq 'freebsd')) &&
+        $symbol eq 'memcmp' && @o == 0) {
+        SKIP: {
+            skip("freebsd memcmp");
+        }
+    } else {
+        ok(@o, "uses $symbol (@o)");
+    }
 }
 
 # There are certain symbols we expect NOT to see.
 }
 
 # There are certain symbols we expect NOT to see.
-
+#
 # gets is horribly unsafe.
 #
 # gets is horribly unsafe.
 #
-# fgets should not be used (Perl has its own API), even without perlio.
+# fgets should not be used (Perl has its own API, sv_gets),
+# even without perlio.
 #
 # tmpfile is unsafe.
 #
 #
 # tmpfile is unsafe.
 #
@@ -473,11 +483,21 @@ for my $symbol (sort keys %expected) {
 # (One exception: for certain floating point outputs
 # the native sprintf is still used in some platforms, see below.)
 #
 # (One exception: for certain floating point outputs
 # the native sprintf is still used in some platforms, see below.)
 #
-# XXX: add atoi() to %unexpected - unsafe and undefined failure modes.
+# atoi has unsafe and undefined failure modes, and is affected by locale.
+# Its cousins include atol and atoll.
+#
+# strtol and strtoul are affected by locale.
+# Cousins include strtoq.
+#
+# system should not be used, use pp_system or my_popen.
 #
 
 my %unexpected;
 
 #
 
 my %unexpected;
 
+for my $str (qw(system)) {
+    $unexpected{$str} = "d_$str";
+}
+
 for my $stdio (qw(gets fgets tmpfile sprintf vsprintf)) {
     $unexpected{$stdio} = undef; # No Configure symbol for these.
 }
 for my $stdio (qw(gets fgets tmpfile sprintf vsprintf)) {
     $unexpected{$stdio} = undef; # No Configure symbol for these.
 }
@@ -485,6 +505,13 @@ for my $str (qw(strcat strcpy strncat strncpy)) {
     $unexpected{$str} = undef; # No Configure symbol for these.
 }
 
     $unexpected{$str} = undef; # No Configure symbol for these.
 }
 
+$unexpected{atoi} = undef; # No Configure symbol for atoi.
+$unexpected{atol} = undef; # No Configure symbol for atol.
+
+for my $str (qw(atoll strtol strtoul strtoq)) {
+    $unexpected{$str} = "d_$str";
+}
+
 for my $symbol (sort keys %unexpected) {
     if (defined $unexpected{$symbol} && !$Config{$unexpected{$symbol}}) {
       SKIP: {
 for my $symbol (sort keys %unexpected) {
     if (defined $unexpected{$symbol} && !$Config{$unexpected{$symbol}}) {
       SKIP: {