Commit | Line | Data |
---|---|---|
9d436106 | 1 | ?RCS: Copyright (c) 2005-2008 H.Merijn Brand |
b47eb986 MB |
2 | ?RCS: |
3 | ?RCS: You may distribute under the terms of either the GNU General Public | |
4 | ?RCS: License or the Artistic License, as specified in the README file. | |
5 | ?RCS: | |
2cb64bf6 | 6 | ?MAKE:d_sprintf_returns_strlen: Compile cat rm_try run i_stdlib i_string i_math echo |
b47eb986 MB |
7 | ?MAKE: -pick add $@ %< |
8 | ?S:d_sprintf_returns_strlen: | |
9 | ?S: This variable defines whether sprintf returns the length of the string | |
10 | ?S: (as per the ANSI spec). Some C libraries retain compatibility with | |
11 | ?S: pre-ANSI C and return a pointer to the passed in buffer; for these | |
12 | ?S: this variable will be undef. | |
13 | ?S:. | |
14 | ?C:SPRINTF_RETURNS_STRLEN: | |
15 | ?C: This variable defines whether sprintf returns the length of the string | |
16 | ?C: (as per the ANSI spec). Some C libraries retain compatibility with | |
17 | ?C: pre-ANSI C and return a pointer to the passed in buffer; for these | |
18 | ?C: this variable will be undef. | |
19 | ?C:. | |
20 | ?H:#$d_sprintf_returns_strlen SPRINTF_RETURNS_STRLEN /**/ | |
21 | ?H:. | |
22 | ?T:xxx | |
0065f4af | 23 | ?F:!try |
b47eb986 MB |
24 | : see if sprintf returns the length of the string in the buffer as per ANSI |
25 | $echo "Checking whether sprintf returns the length of the string..." >&4 | |
26 | $cat <<EOP >try.c | |
27 | #include <stdio.h> | |
28 | #$i_stdlib I_STDLIB | |
29 | #ifdef I_STDLIB | |
30 | #include <stdlib.h> | |
31 | #endif | |
32 | #$i_string I_STRING | |
33 | #ifdef I_STRING | |
34 | # include <string.h> | |
35 | #else | |
36 | # include <strings.h> | |
37 | #endif | |
38 | #$i_math I_MATH | |
39 | #ifdef I_MATH | |
40 | #include <math.h> | |
41 | #endif | |
42 | ||
43 | char buffer[256]; | |
44 | ||
45 | int check (size_t expect, int test) { | |
46 | size_t got = strlen(buffer); | |
47 | if (expect == got) | |
48 | return 0; | |
49 | ||
50 | printf("expected %ld, got %ld in test %d '%s'\n", (long) expect, (long) got, | |
51 | test, buffer); | |
52 | exit (test); | |
53 | } | |
54 | ||
55 | int main(int argc, char **argv) { | |
56 | int test = 0; | |
57 | ||
58 | check(sprintf(buffer, ""), ++test); | |
59 | check(sprintf(buffer, "%s %s", "perl", "rules"), ++test); | |
60 | check(sprintf(buffer, "I like %g", atan2(0,-1)), ++test); | |
61 | ||
62 | return 0; | |
63 | } | |
64 | EOP | |
65 | set try | |
66 | ||
b47eb986 MB |
67 | if eval $compile; then |
68 | xxx="`$run ./try`" | |
69 | case "$?" in | |
70 | 0) cat >&4 <<EOM | |
71 | sprintf returns the length of the string (as ANSI says it should) | |
72 | EOM | |
73 | d_sprintf_returns_strlen="$define" | |
74 | ;; | |
75 | *) cat >&4 <<EOM | |
76 | sprintf does not return the length of the string (how old is this system?) | |
77 | EOM | |
78 | d_sprintf_returns_strlen="$undef" | |
79 | ;; | |
80 | esac | |
76771ec7 | 81 | else |
9d436106 JH |
82 | echo "(I can't seem to compile the test program--assuming it doesn't)" >&4 |
83 | d_sprintf_returns_strlen="$undef" | |
b47eb986 | 84 | fi |
2cb64bf6 | 85 | $rm_try |
b47eb986 | 86 |