This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Part 2 of a big cleanup action based on the upcoming dist-4.0
[metaconfig.git] / U / perl / d_strtoull.U
1 ?RCS: $Id$
2 ?RCS:
3 ?RCS: Copyright (c) 2000 Jarkko Hietaniemi
4 ?RCS:
5 ?RCS: You may distribute under the terms of either the GNU General Public
6 ?RCS: License or the Artistic License, as specified in the README file.
7 ?RCS:
8 ?MAKE:d_strtoull: Inlibc d_longlong Compile cat run
9 ?MAKE:  -pick add $@ %<
10 ?S:d_strtoull:
11 ?S:     This variable conditionally defines the HAS_STRTOULL symbol, which
12 ?S:     indicates to the C program that the strtoull() routine is available.
13 ?S:.
14 ?C:HAS_STRTOULL:
15 ?C:     This symbol, if defined, indicates that the strtoull routine is
16 ?C:     available to convert strings to unsigned long longs.
17 ?C:.
18 ?H:#$d_strtoull HAS_STRTOULL            /**/
19 ?H:.
20 ?F:!try
21 ?LINT:set d_strtoull
22 : see if strtoull exists
23 set strtoull d_strtoull
24 eval $inlibc
25
26 case "$d_longlong-$d_strtoull" in
27 "$define-$define")
28         $cat <<EOM
29 Checking whether your strtoull() works okay...
30 EOM
31         $cat >try.c <<'EOCP'
32 #include <errno.h>
33 #ifdef __hpux
34 #define strtoull __strtoull
35 #endif
36 #include <stdio.h>
37 extern unsigned long long int strtoull(char *s, char **, int);
38 static int bad = 0;
39 int check(char *s, long long eull, int een) {
40         long long gull;
41         errno = 0;
42         gull = strtoull(s, 0, 10);
43         if (!((gull == eull) && (errno == een)))
44                 bad++;
45 }
46 int main() {
47         check(" 1",                                        1LL, 0);
48         check(" 0",                                        0LL, 0);
49         check("18446744073709551615",  18446744073709551615ULL, 0);
50         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
51 #if 0 /* strtoull() for /^-/ strings is undefined. */
52         check("-1",                    18446744073709551615ULL, 0);
53         check("-18446744073709551614",                     2LL, 0);
54         check("-18446744073709551615",                     1LL, 0);
55         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
56         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
57 #endif
58         if (!bad)
59                 printf("ok\n");
60 }
61 EOCP
62         set try
63         if eval $compile; then
64                 case "`$run ./try`" in
65                 ok) echo "Your strtoull() seems to be working okay." ;;
66                 *) cat <<EOM >&4
67 Your strtoull() doesn't seem to be working okay.
68 EOM
69                    d_strtoull="$undef"
70                    ;;
71                 esac
72         else
73                 echo "(I can't seem to compile the test program--assuming it doesn't)"
74                 d_strtoull="$undef"
75         fi
76         ;;
77 esac
78