This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Fix strtoll, strtoul, and strtouq probes to compile under clang++.
authorAndy Dougherty <doughera@lafayette.edu>
Tue, 27 Aug 2019 19:22:05 +0000 (15:22 -0400)
committerAndy Dougherty <doughera@lafayette.edu>
Sun, 29 Dec 2019 22:39:32 +0000 (17:39 -0500)
The test programs were missing the stdlib.h header, and needed
tweaks to the check() prototype to compile under clang++.  These
changes should be fine for C compilers as well, but they have typically
been more forgiving, so shouldn't be affected.

Configure

index 9f959c8..8d67b39 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -19105,9 +19105,9 @@ EOM
 #define strtoll _strtoll
 #endif
 #include <stdio.h>
-extern long long int strtoll(char *s, char **, int);
+#include <stdlib.h>
 static int bad = 0;
-int check(char *s, long long ell, int een) {
+void check(const char *s, long long ell, int een) {
        long long gll;
        errno = 0;
        gll = strtoll(s, 0, 10);
@@ -19160,11 +19160,11 @@ case "$d_strtoul" in
 Checking whether your strtoul() works okay...
 EOM
        $cat >try.c <<'EOCP'
+#include <stdlib.h>
 #include <errno.h>
 #include <stdio.h>
-extern unsigned long int strtoul(char *s, char **, int);
 static int bad = 0;
-void check(char *s, unsigned long eul, int een) {
+void check(const char *s, unsigned long eul, int een) {
        unsigned long gul;
        errno = 0;
        gul = strtoul(s, 0, 10);
@@ -19297,11 +19297,11 @@ case "$d_strtouq" in
 Checking whether your strtouq() works okay...
 EOM
        $cat >try.c <<'EOCP'
+#include <stdlib.h>
 #include <errno.h>
 #include <stdio.h>
-extern unsigned long long int strtouq(char *s, char **, int);
 static int bad = 0;
-void check(char *s, unsigned long long eull, int een) {
+void check(const char *s, unsigned long long eull, int een) {
        unsigned long long gull;
        errno = 0;
        gull = strtouq(s, 0, 10);