Commit | Line | Data |
---|---|---|
e0d71d2f JH |
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: | |
0f00356b | 8 | ?MAKE:d_strtoull: Inlibc d_longlong Compile cat run |
e0d71d2f | 9 | ?MAKE: -pick add $@ %< |
edd6115f JH |
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. | |
e0d71d2f | 13 | ?S:. |
edd6115f JH |
14 | ?C:HAS_STRTOULL: |
15 | ?C: This symbol, if defined, indicates that the strtoull routine is | |
e0d71d2f JH |
16 | ?C: available to convert strings to unsigned long longs. |
17 | ?C:. | |
edd6115f | 18 | ?H:#$d_strtoull HAS_STRTOULL /**/ |
e0d71d2f | 19 | ?H:. |
0065f4af | 20 | ?F:!try |
edd6115f JH |
21 | ?LINT:set d_strtoull |
22 | : see if strtoull exists | |
23 | set strtoull d_strtoull | |
e0d71d2f | 24 | eval $inlibc |
edd6115f | 25 | |
2bc4e3e5 JH |
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> | |
0065f4af | 37 | extern unsigned long long int strtoull(char *s, char **, int); |
2bc4e3e5 JH |
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() { | |
6e4a03c9 JH |
47 | check(" 1", 1LL, 0); |
48 | check(" 0", 0LL, 0); | |
49 | check("18446744073709551615", 18446744073709551615ULL, 0); | |
50 | check("18446744073709551616", 18446744073709551615ULL, ERANGE); | |
357ef92f | 51 | #if 0 /* strtoull() for /^-/ strings is undefined. */ |
6e4a03c9 JH |
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); | |
357ef92f | 57 | #endif |
2bc4e3e5 JH |
58 | if (!bad) |
59 | printf("ok\n"); | |
60 | } | |
61 | EOCP | |
62 | set try | |
63 | if eval $compile; then | |
0f00356b | 64 | case "`$run ./try`" in |
2bc4e3e5 JH |
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 | |
ee6ec6d2 MB |
72 | else |
73 | echo "(I can't seem to compile the test program--assuming it doesn't)" | |
74 | d_strtoull="$undef" | |
2bc4e3e5 JH |
75 | fi |
76 | ;; | |
77 | esac | |
78 |