This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Backport of change #25831 by Nicholas, and the config part of #25832
[metaconfig.git] / U / perl / d_sprintf_len.U
1 ?RCS: $Id$
2 ?RCS:
3 ?RCS: Copyright (c) 2005 H.Merijn Brand
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_sprintf_returns_strlen: Compile cat rm run i_stdlib i_string i_math echo
9 ?MAKE:  -pick add $@ %<
10 ?S:d_sprintf_returns_strlen:
11 ?S:     This variable defines whether sprintf returns the length of the string
12 ?S:     (as per the ANSI spec). Some C libraries retain compatibility with
13 ?S:     pre-ANSI C and return a pointer to the passed in buffer; for these
14 ?S:     this variable will be undef.
15 ?S:.
16 ?C:SPRINTF_RETURNS_STRLEN:
17 ?C:     This variable defines whether sprintf returns the length of the string
18 ?C:     (as per the ANSI spec). Some C libraries retain compatibility with
19 ?C:     pre-ANSI C and return a pointer to the passed in buffer; for these
20 ?C:     this variable will be undef.
21 ?C:.
22 ?H:#$d_sprintf_returns_strlen SPRINTF_RETURNS_STRLEN    /**/
23 ?H:.
24 ?T:xxx
25 : see if sprintf returns the length of the string in the buffer as per ANSI
26 $echo "Checking whether sprintf returns the length of the string..." >&4
27 $cat <<EOP >try.c
28 #include <stdio.h>
29 #$i_stdlib I_STDLIB
30 #ifdef I_STDLIB
31 #include <stdlib.h>
32 #endif
33 #$i_string I_STRING
34 #ifdef I_STRING
35 #  include <string.h>
36 #else
37 #  include <strings.h>
38 #endif
39 #$i_math I_MATH
40 #ifdef I_MATH
41 #include <math.h>
42 #endif
43
44 char buffer[256];
45
46 int check (size_t expect, int test) {
47   size_t got = strlen(buffer);
48   if (expect == got)
49     return 0;
50
51   printf("expected %ld, got %ld in test %d '%s'\n", (long) expect, (long) got,
52        test, buffer);
53   exit (test);
54 }
55
56 int main(int argc, char **argv) {
57   int test = 0;
58
59   check(sprintf(buffer, ""), ++test);
60   check(sprintf(buffer, "%s %s", "perl", "rules"), ++test);
61   check(sprintf(buffer, "I like %g", atan2(0,-1)), ++test);
62
63   return 0;
64 }
65 EOP
66 set try
67
68 d_sprintf_returns_strlen="$undef"
69 if eval $compile; then
70     xxx="`$run ./try`"
71     case "$?" in
72         0) cat >&4 <<EOM
73 sprintf returns the length of the string (as ANSI says it should)
74 EOM
75         d_sprintf_returns_strlen="$define"
76         ;;
77         *) cat >&4 <<EOM
78 sprintf does not return the length of the string (how old is this system?)
79 EOM
80         d_sprintf_returns_strlen="$undef"
81         ;;
82     esac
83 fi
84
85 $rm -f try.* try
86