2 dnl Copyright (C) 2003, 2007-2008 Free Software Foundation, Inc.
3 dnl This file is free software; the Free Software Foundation
4 dnl gives unlimited permission to copy and/or distribute it,
5 dnl with or without modifications, as long as this notice is preserved.
7 dnl Test whether the *printf family of functions supports the 'j', 'z', 't',
8 dnl 'L' size specifiers. (ISO C99, POSIX:2001)
9 dnl Result is gl_cv_func_printf_sizes_c99.
11 AC_DEFUN([gl_PRINTF_SIZES_C99],
13 AC_REQUIRE([AC_PROG_CC])
14 AC_REQUIRE([gl_AC_HEADER_STDINT_H])
15 AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
16 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
17 AC_CACHE_CHECK([whether printf supports size specifiers as in C99],
18 [gl_cv_func_printf_sizes_c99],
24 #include <sys/types.h>
25 #if HAVE_STDINT_H_WITH_UINTMAX
28 #if HAVE_INTTYPES_H_WITH_UINTMAX
29 # include <inttypes.h>
34 #if HAVE_STDINT_H_WITH_UINTMAX || HAVE_INTTYPES_H_WITH_UINTMAX
36 if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0
37 || strcmp (buf, "12345671 33") != 0)
41 if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0
42 || strcmp (buf, "12345672 33") != 0)
45 if (sprintf (buf, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55) < 0
46 || strcmp (buf, "12345673 33") != 0)
49 if (sprintf (buf, "%Lg %d", (long double) 1.5, 33, 44, 55) < 0
50 || strcmp (buf, "1.5 33") != 0)
53 }], [gl_cv_func_printf_sizes_c99=yes], [gl_cv_func_printf_sizes_c99=no],
57 # Guess yes on glibc systems.
58 *-gnu*) gl_cv_func_printf_sizes_c99="guessing yes";;
59 # Guess yes on FreeBSD >= 5.
60 freebsd[1-4]*) gl_cv_func_printf_sizes_c99="guessing no";;
61 freebsd* | kfreebsd*) gl_cv_func_printf_sizes_c99="guessing yes";;
62 # Guess yes on MacOS X >= 10.3.
63 darwin[1-6].*) gl_cv_func_printf_sizes_c99="guessing no";;
64 darwin*) gl_cv_func_printf_sizes_c99="guessing yes";;
65 # Guess yes on OpenBSD >= 3.9.
66 openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*)
67 gl_cv_func_printf_sizes_c99="guessing no";;
68 openbsd*) gl_cv_func_printf_sizes_c99="guessing yes";;
69 # Guess yes on Solaris >= 2.10.
70 solaris2.[0-9]*) gl_cv_func_printf_sizes_c99="guessing no";;
71 solaris*) gl_cv_func_printf_sizes_c99="guessing yes";;
72 # Guess yes on NetBSD >= 3.
73 netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
74 gl_cv_func_printf_sizes_c99="guessing no";;
75 netbsd*) gl_cv_func_printf_sizes_c99="guessing yes";;
76 # If we don't know, assume the worst.
77 *) gl_cv_func_printf_sizes_c99="guessing no";;
84 dnl Test whether the *printf family of functions supports 'long double'
85 dnl arguments together with the 'L' size specifier. (ISO C99, POSIX:2001)
86 dnl Result is gl_cv_func_printf_long_double.
88 AC_DEFUN([gl_PRINTF_LONG_DOUBLE],
90 AC_REQUIRE([AC_PROG_CC])
91 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
92 AC_CACHE_CHECK([whether printf supports 'long double' arguments],
93 [gl_cv_func_printf_long_double],
98 static char buf[10000];
102 if (sprintf (buf, "%Lf %d", 1.75L, 33, 44, 55) < 0
103 || strcmp (buf, "1.750000 33") != 0)
106 if (sprintf (buf, "%Le %d", 1.75L, 33, 44, 55) < 0
107 || strcmp (buf, "1.750000e+00 33") != 0)
110 if (sprintf (buf, "%Lg %d", 1.75L, 33, 44, 55) < 0
111 || strcmp (buf, "1.75 33") != 0)
114 }], [gl_cv_func_printf_long_double=yes], [gl_cv_func_printf_long_double=no],
118 beos*) gl_cv_func_printf_long_double="guessing no";;
119 mingw* | pw*) gl_cv_func_printf_long_double="guessing no";;
120 *) gl_cv_func_printf_long_double="guessing yes";;
127 dnl Test whether the *printf family of functions supports infinite and NaN
128 dnl 'double' arguments in the %f, %e, %g directives. (ISO C99, POSIX:2001)
129 dnl Result is gl_cv_func_printf_infinite.
131 AC_DEFUN([gl_PRINTF_INFINITE],
133 AC_REQUIRE([AC_PROG_CC])
134 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
135 AC_CACHE_CHECK([whether printf supports infinite 'double' arguments],
136 [gl_cv_func_printf_infinite],
142 strisnan (const char *string, size_t start_index, size_t end_index)
144 if (start_index < end_index)
146 if (string[start_index] == '-')
148 if (start_index + 3 <= end_index
149 && memcmp (string + start_index, "nan", 3) == 0)
152 if (start_index == end_index
153 || (string[start_index] == '(' && string[end_index - 1] == ')'))
159 static char buf[10000];
160 static double zero = 0.0;
163 if (sprintf (buf, "%f", 1.0 / 0.0) < 0
164 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
166 if (sprintf (buf, "%f", -1.0 / 0.0) < 0
167 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
169 if (sprintf (buf, "%f", zero / zero) < 0
170 || !strisnan (buf, 0, strlen (buf)))
172 if (sprintf (buf, "%e", 1.0 / 0.0) < 0
173 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
175 if (sprintf (buf, "%e", -1.0 / 0.0) < 0
176 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
178 if (sprintf (buf, "%e", zero / zero) < 0
179 || !strisnan (buf, 0, strlen (buf)))
181 if (sprintf (buf, "%g", 1.0 / 0.0) < 0
182 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
184 if (sprintf (buf, "%g", -1.0 / 0.0) < 0
185 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
187 if (sprintf (buf, "%g", zero / zero) < 0
188 || !strisnan (buf, 0, strlen (buf)))
191 }], [gl_cv_func_printf_infinite=yes], [gl_cv_func_printf_infinite=no],
195 # Guess yes on glibc systems.
196 *-gnu*) gl_cv_func_printf_infinite="guessing yes";;
197 # Guess yes on FreeBSD >= 6.
198 freebsd[1-5]*) gl_cv_func_printf_infinite="guessing no";;
199 freebsd* | kfreebsd*) gl_cv_func_printf_infinite="guessing yes";;
200 # Guess yes on MacOS X >= 10.3.
201 darwin[1-6].*) gl_cv_func_printf_infinite="guessing no";;
202 darwin*) gl_cv_func_printf_infinite="guessing yes";;
203 # Guess yes on HP-UX >= 11.
204 hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite="guessing no";;
205 hpux*) gl_cv_func_printf_infinite="guessing yes";;
206 # Guess yes on NetBSD >= 3.
207 netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
208 gl_cv_func_printf_infinite="guessing no";;
209 netbsd*) gl_cv_func_printf_infinite="guessing yes";;
211 beos*) gl_cv_func_printf_infinite="guessing yes";;
212 # If we don't know, assume the worst.
213 *) gl_cv_func_printf_infinite="guessing no";;
220 dnl Test whether the *printf family of functions supports infinite and NaN
221 dnl 'long double' arguments in the %f, %e, %g directives. (ISO C99, POSIX:2001)
222 dnl Result is gl_cv_func_printf_infinite_long_double.
224 AC_DEFUN([gl_PRINTF_INFINITE_LONG_DOUBLE],
226 AC_REQUIRE([gl_PRINTF_LONG_DOUBLE])
227 AC_REQUIRE([AC_PROG_CC])
228 AC_REQUIRE([AC_C_BIGENDIAN])
229 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
230 dnl The user can set or unset the variable gl_printf_safe to indicate
231 dnl that he wishes a safe handling of non-IEEE-754 'long double' values.
232 if test -n "$gl_printf_safe"; then
233 AC_DEFINE([CHECK_PRINTF_SAFE], 1,
234 [Define if you wish *printf() functions that have a safe handling of
235 non-IEEE-754 'long double' values.])
237 case "$gl_cv_func_printf_long_double" in
239 AC_CACHE_CHECK([whether printf supports infinite 'long double' arguments],
240 [gl_cv_func_printf_infinite_long_double],
248 strisnan (const char *string, size_t start_index, size_t end_index)
250 if (start_index < end_index)
252 if (string[start_index] == '-')
254 if (start_index + 3 <= end_index
255 && memcmp (string + start_index, "nan", 3) == 0)
258 if (start_index == end_index
259 || (string[start_index] == '(' && string[end_index - 1] == ')'))
265 static char buf[10000];
266 static long double zeroL = 0.0L;
270 if (sprintf (buf, "%Lf", 1.0L / 0.0L) < 0
271 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
273 if (sprintf (buf, "%Lf", -1.0L / 0.0L) < 0
274 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
276 if (sprintf (buf, "%Lf", zeroL / zeroL) < 0
277 || !strisnan (buf, 0, strlen (buf)))
279 if (sprintf (buf, "%Le", 1.0L / 0.0L) < 0
280 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
282 if (sprintf (buf, "%Le", -1.0L / 0.0L) < 0
283 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
285 if (sprintf (buf, "%Le", zeroL / zeroL) < 0
286 || !strisnan (buf, 0, strlen (buf)))
288 if (sprintf (buf, "%Lg", 1.0L / 0.0L) < 0
289 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
291 if (sprintf (buf, "%Lg", -1.0L / 0.0L) < 0
292 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
294 if (sprintf (buf, "%Lg", zeroL / zeroL) < 0
295 || !strisnan (buf, 0, strlen (buf)))
297 #if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_))
298 /* Representation of an 80-bit 'long double' as an initializer for a sequence
299 of 'unsigned int' words. */
300 # ifdef WORDS_BIGENDIAN
301 # define LDBL80_WORDS(exponent,manthi,mantlo) \
302 { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \
303 ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16), \
304 (unsigned int) (mantlo) << 16 \
307 # define LDBL80_WORDS(exponent,manthi,mantlo) \
308 { mantlo, manthi, exponent }
311 static union { unsigned int word[4]; long double value; } x =
312 { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };
313 if (sprintf (buf, "%Lf", x.value) < 0
314 || !strisnan (buf, 0, strlen (buf)))
316 if (sprintf (buf, "%Le", x.value) < 0
317 || !strisnan (buf, 0, strlen (buf)))
319 if (sprintf (buf, "%Lg", x.value) < 0
320 || !strisnan (buf, 0, strlen (buf)))
324 /* Signalling NaN. */
325 static union { unsigned int word[4]; long double value; } x =
326 { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
327 if (sprintf (buf, "%Lf", x.value) < 0
328 || !strisnan (buf, 0, strlen (buf)))
330 if (sprintf (buf, "%Le", x.value) < 0
331 || !strisnan (buf, 0, strlen (buf)))
333 if (sprintf (buf, "%Lg", x.value) < 0
334 || !strisnan (buf, 0, strlen (buf)))
338 static union { unsigned int word[4]; long double value; } x =
339 { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
340 if (sprintf (buf, "%Lf", x.value) < 0
341 || !strisnan (buf, 0, strlen (buf)))
343 if (sprintf (buf, "%Le", x.value) < 0
344 || !strisnan (buf, 0, strlen (buf)))
346 if (sprintf (buf, "%Lg", x.value) < 0
347 || !strisnan (buf, 0, strlen (buf)))
350 { /* Pseudo-Infinity. */
351 static union { unsigned int word[4]; long double value; } x =
352 { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
353 if (sprintf (buf, "%Lf", x.value) < 0
354 || !strisnan (buf, 0, strlen (buf)))
356 if (sprintf (buf, "%Le", x.value) < 0
357 || !strisnan (buf, 0, strlen (buf)))
359 if (sprintf (buf, "%Lg", x.value) < 0
360 || !strisnan (buf, 0, strlen (buf)))
364 static union { unsigned int word[4]; long double value; } x =
365 { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
366 if (sprintf (buf, "%Lf", x.value) < 0
367 || !strisnan (buf, 0, strlen (buf)))
369 if (sprintf (buf, "%Le", x.value) < 0
370 || !strisnan (buf, 0, strlen (buf)))
372 if (sprintf (buf, "%Lg", x.value) < 0
373 || !strisnan (buf, 0, strlen (buf)))
376 { /* Unnormalized number. */
377 static union { unsigned int word[4]; long double value; } x =
378 { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
379 if (sprintf (buf, "%Lf", x.value) < 0
380 || !strisnan (buf, 0, strlen (buf)))
382 if (sprintf (buf, "%Le", x.value) < 0
383 || !strisnan (buf, 0, strlen (buf)))
385 if (sprintf (buf, "%Lg", x.value) < 0
386 || !strisnan (buf, 0, strlen (buf)))
389 { /* Pseudo-Denormal. */
390 static union { unsigned int word[4]; long double value; } x =
391 { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
392 if (sprintf (buf, "%Lf", x.value) < 0
393 || !strisnan (buf, 0, strlen (buf)))
395 if (sprintf (buf, "%Le", x.value) < 0
396 || !strisnan (buf, 0, strlen (buf)))
398 if (sprintf (buf, "%Lg", x.value) < 0
399 || !strisnan (buf, 0, strlen (buf)))
405 [gl_cv_func_printf_infinite_long_double=yes],
406 [gl_cv_func_printf_infinite_long_double=no],
410 # Guess no on ia64, x86_64, i386.
411 ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";;
414 # Guess yes on glibc systems.
415 *-gnu*) gl_cv_func_printf_infinite_long_double="guessing yes";;
416 # Guess yes on FreeBSD >= 6.
417 freebsd[1-5]*) gl_cv_func_printf_infinite_long_double="guessing no";;
418 freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";;
419 # Guess yes on MacOS X >= 10.3.
420 darwin[1-6].*) gl_cv_func_printf_infinite_long_double="guessing no";;
421 darwin*) gl_cv_func_printf_infinite_long_double="guessing yes";;
422 # Guess yes on HP-UX >= 11.
423 hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";;
424 hpux*) gl_cv_func_printf_infinite_long_double="guessing yes";;
425 # Guess yes on NetBSD >= 3.
426 netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
427 gl_cv_func_printf_infinite_long_double="guessing no";;
428 netbsd*) gl_cv_func_printf_infinite_long_double="guessing yes";;
429 # If we don't know, assume the worst.
430 *) gl_cv_func_printf_infinite_long_double="guessing no";;
439 gl_cv_func_printf_infinite_long_double="irrelevant"
444 dnl Test whether the *printf family of functions supports the 'a' and 'A'
445 dnl conversion specifier for hexadecimal output of floating-point numbers.
446 dnl (ISO C99, POSIX:2001)
447 dnl Result is gl_cv_func_printf_directive_a.
449 AC_DEFUN([gl_PRINTF_DIRECTIVE_A],
451 AC_REQUIRE([AC_PROG_CC])
452 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
453 AC_CACHE_CHECK([whether printf supports the 'a' and 'A' directives],
454 [gl_cv_func_printf_directive_a],
459 static char buf[100];
462 if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0
463 || (strcmp (buf, "0x1.922p+1 33") != 0
464 && strcmp (buf, "0x3.244p+0 33") != 0
465 && strcmp (buf, "0x6.488p-1 33") != 0
466 && strcmp (buf, "0xc.91p-2 33") != 0))
468 if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0
469 || (strcmp (buf, "-0X1.922P+1 33") != 0
470 && strcmp (buf, "-0X3.244P+0 33") != 0
471 && strcmp (buf, "-0X6.488P-1 33") != 0
472 && strcmp (buf, "-0XC.91P-2 33") != 0))
474 /* This catches a FreeBSD 6.1 bug: it doesn't round. */
475 if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0
476 || (strcmp (buf, "0x1.83p+0 33") != 0
477 && strcmp (buf, "0x3.05p-1 33") != 0
478 && strcmp (buf, "0x6.0ap-2 33") != 0
479 && strcmp (buf, "0xc.14p-3 33") != 0))
481 /* This catches a FreeBSD 6.1 bug. See
482 <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
483 if (sprintf (buf, "%010a %d", 1.0 / 0.0, 33, 44, 55) < 0
486 /* This catches a MacOS X 10.3.9 (Darwin 7.9) bug. */
487 if (sprintf (buf, "%.1a", 1.999) < 0
488 || (strcmp (buf, "0x1.0p+1") != 0
489 && strcmp (buf, "0x2.0p+0") != 0
490 && strcmp (buf, "0x4.0p-1") != 0
491 && strcmp (buf, "0x8.0p-2") != 0))
493 /* This catches the same MacOS X 10.3.9 (Darwin 7.9) bug and also a
494 glibc 2.4 bug <http://sourceware.org/bugzilla/show_bug.cgi?id=2908>. */
495 if (sprintf (buf, "%.1La", 1.999L) < 0
496 || (strcmp (buf, "0x1.0p+1") != 0
497 && strcmp (buf, "0x2.0p+0") != 0
498 && strcmp (buf, "0x4.0p-1") != 0
499 && strcmp (buf, "0x8.0p-2") != 0))
502 }], [gl_cv_func_printf_directive_a=yes], [gl_cv_func_printf_directive_a=no],
505 # Guess yes on glibc >= 2.5 systems.
507 AC_EGREP_CPP([BZ2908], [
508 #include <features.h>
509 #ifdef __GNU_LIBRARY__
510 #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 5) || (__GLIBC__ > 2)
515 [gl_cv_func_printf_directive_a="guessing yes"],
516 [gl_cv_func_printf_directive_a="guessing no"])
518 # If we don't know, assume the worst.
519 *) gl_cv_func_printf_directive_a="guessing no";;
525 dnl Test whether the *printf family of functions supports the %F format
526 dnl directive. (ISO C99, POSIX:2001)
527 dnl Result is gl_cv_func_printf_directive_f.
529 AC_DEFUN([gl_PRINTF_DIRECTIVE_F],
531 AC_REQUIRE([AC_PROG_CC])
532 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
533 AC_CACHE_CHECK([whether printf supports the 'F' directive],
534 [gl_cv_func_printf_directive_f],
539 static char buf[100];
542 if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0
543 || strcmp (buf, "1234567.000000 33") != 0)
545 if (sprintf (buf, "%F", 1.0 / 0.0) < 0
546 || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0))
548 /* This catches a Cygwin 2007 bug. */
549 if (sprintf (buf, "%.F", 1234.0) < 0
550 || strcmp (buf, "1234") != 0)
553 }], [gl_cv_func_printf_directive_f=yes], [gl_cv_func_printf_directive_f=no],
557 # Guess yes on glibc systems.
558 *-gnu*) gl_cv_func_printf_directive_f="guessing yes";;
559 # Guess yes on FreeBSD >= 6.
560 freebsd[1-5]*) gl_cv_func_printf_directive_f="guessing no";;
561 freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";;
562 # Guess yes on MacOS X >= 10.3.
563 darwin[1-6].*) gl_cv_func_printf_directive_f="guessing no";;
564 darwin*) gl_cv_func_printf_directive_f="guessing yes";;
565 # Guess yes on Solaris >= 2.10.
566 solaris2.[0-9]*) gl_cv_func_printf_directive_f="guessing no";;
567 solaris*) gl_cv_func_printf_directive_f="guessing yes";;
568 # If we don't know, assume the worst.
569 *) gl_cv_func_printf_directive_f="guessing no";;
576 dnl Test whether the *printf family of functions supports the %n format
577 dnl directive. (ISO C99, POSIX:2001)
578 dnl Result is gl_cv_func_printf_directive_n.
580 AC_DEFUN([gl_PRINTF_DIRECTIVE_N],
582 AC_REQUIRE([AC_PROG_CC])
583 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
584 AC_CACHE_CHECK([whether printf supports the 'n' directive],
585 [gl_cv_func_printf_directive_n],
590 static char fmtstring[10];
591 static char buf[100];
595 /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2)
596 support %n in format strings in read-only memory but not in writable
598 strcpy (fmtstring, "%d %n");
599 if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0
600 || strcmp (buf, "123 ") != 0
604 }], [gl_cv_func_printf_directive_n=yes], [gl_cv_func_printf_directive_n=no],
608 *) gl_cv_func_printf_directive_n="guessing yes";;
615 dnl Test whether the *printf family of functions supports POSIX/XSI format
616 dnl strings with positions. (POSIX:2001)
617 dnl Result is gl_cv_func_printf_positions.
619 AC_DEFUN([gl_PRINTF_POSITIONS],
621 AC_REQUIRE([AC_PROG_CC])
622 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
623 AC_CACHE_CHECK([whether printf supports POSIX/XSI format strings with positions],
624 [gl_cv_func_printf_positions],
629 /* The string "%2$d %1$d", with dollar characters protected from the shell's
630 dollar expansion (possibly an autoconf bug). */
631 static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
632 static char buf[100];
635 sprintf (buf, format, 33, 55);
636 return (strcmp (buf, "55 33") != 0);
637 }], [gl_cv_func_printf_positions=yes], [gl_cv_func_printf_positions=no],
641 netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*)
642 gl_cv_func_printf_positions="guessing no";;
643 beos*) gl_cv_func_printf_positions="guessing no";;
644 mingw* | pw*) gl_cv_func_printf_positions="guessing no";;
645 *) gl_cv_func_printf_positions="guessing yes";;
652 dnl Test whether the *printf family of functions supports POSIX/XSI format
653 dnl strings with the ' flag for grouping of decimal digits. (POSIX:2001)
654 dnl Result is gl_cv_func_printf_flag_grouping.
656 AC_DEFUN([gl_PRINTF_FLAG_GROUPING],
658 AC_REQUIRE([AC_PROG_CC])
659 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
660 AC_CACHE_CHECK([whether printf supports the grouping flag],
661 [gl_cv_func_printf_flag_grouping],
666 static char buf[100];
669 if (sprintf (buf, "%'d %d", 1234567, 99) < 0
670 || buf[strlen (buf) - 1] != '9')
673 }], [gl_cv_func_printf_flag_grouping=yes], [gl_cv_func_printf_flag_grouping=no],
677 cygwin*) gl_cv_func_printf_flag_grouping="guessing no";;
678 netbsd*) gl_cv_func_printf_flag_grouping="guessing no";;
679 mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";;
680 *) gl_cv_func_printf_flag_grouping="guessing yes";;
687 dnl Test whether the *printf family of functions supports the - flag correctly.
689 dnl <http://lists.gnu.org/archive/html/bug-coreutils/2008-02/msg00035.html>
690 dnl Result is gl_cv_func_printf_flag_leftadjust.
692 AC_DEFUN([gl_PRINTF_FLAG_LEFTADJUST],
694 AC_REQUIRE([AC_PROG_CC])
695 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
696 AC_CACHE_CHECK([whether printf supports the left-adjust flag correctly],
697 [gl_cv_func_printf_flag_leftadjust],
702 static char buf[100];
705 /* Check that a '-' flag is not annihilated by a negative width. */
706 if (sprintf (buf, "a%-*sc", -3, "b") < 0
707 || strcmp (buf, "ab c") != 0)
711 [gl_cv_func_printf_flag_leftadjust=yes],
712 [gl_cv_func_printf_flag_leftadjust=no],
716 # Guess yes on HP-UX 11.
717 hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";;
718 # Guess no on HP-UX 10 and older.
719 hpux*) gl_cv_func_printf_flag_leftadjust="guessing no";;
720 # Guess yes otherwise.
721 *) gl_cv_func_printf_flag_leftadjust="guessing yes";;
728 dnl Test whether the *printf family of functions supports padding of non-finite
729 dnl values with the 0 flag correctly. (ISO C99 + TC1 + TC2.) See
730 dnl <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html>
731 dnl Result is gl_cv_func_printf_flag_zero.
733 AC_DEFUN([gl_PRINTF_FLAG_ZERO],
735 AC_REQUIRE([AC_PROG_CC])
736 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
737 AC_CACHE_CHECK([whether printf supports the zero flag correctly],
738 [gl_cv_func_printf_flag_zero],
743 static char buf[100];
746 if (sprintf (buf, "%010f", 1.0 / 0.0, 33, 44, 55) < 0
747 || (strcmp (buf, " inf") != 0
748 && strcmp (buf, " infinity") != 0))
751 }], [gl_cv_func_printf_flag_zero=yes], [gl_cv_func_printf_flag_zero=no],
755 # Guess yes on glibc systems.
756 *-gnu*) gl_cv_func_printf_flag_zero="guessing yes";;
758 beos*) gl_cv_func_printf_flag_zero="guessing yes";;
759 # If we don't know, assume the worst.
760 *) gl_cv_func_printf_flag_zero="guessing no";;
767 dnl Test whether the *printf family of functions supports large precisions.
768 dnl On mingw, precisions larger than 512 are treated like 512, in integer,
769 dnl floating-point or pointer output. On BeOS, precisions larger than 1044
770 dnl crash the program.
771 dnl Result is gl_cv_func_printf_precision.
773 AC_DEFUN([gl_PRINTF_PRECISION],
775 AC_REQUIRE([AC_PROG_CC])
776 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
777 AC_CACHE_CHECK([whether printf supports large precisions],
778 [gl_cv_func_printf_precision],
783 static char buf[5000];
787 /* On BeOS, this would crash and show a dialog box. Avoid the crash. */
790 if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3)
793 }], [gl_cv_func_printf_precision=yes], [gl_cv_func_printf_precision=no],
797 # Guess no only on native Win32 and BeOS systems.
798 mingw* | pw*) gl_cv_func_printf_precision="guessing no" ;;
799 beos*) gl_cv_func_printf_precision="guessing no" ;;
800 *) gl_cv_func_printf_precision="guessing yes" ;;
807 dnl Test whether the *printf family of functions recovers gracefully in case
808 dnl of an out-of-memory condition, or whether it crashes the entire program.
809 dnl Result is gl_cv_func_printf_enomem.
811 AC_DEFUN([gl_PRINTF_ENOMEM],
813 AC_REQUIRE([AC_PROG_CC])
814 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
815 AC_CACHE_CHECK([whether printf survives out-of-memory conditions],
816 [gl_cv_func_printf_enomem],
818 gl_cv_func_printf_enomem="guessing no"
819 if test "$cross_compiling" = no; then
820 AC_LANG_CONFTEST([AC_LANG_SOURCE([
824 #include <sys/types.h>
825 #include <sys/time.h>
826 #include <sys/resource.h>
833 /* Some printf implementations allocate temporary space with malloc. */
834 /* On BSD systems, malloc() is limited by RLIMIT_DATA. */
836 if (getrlimit (RLIMIT_DATA, &limit) < 0)
838 if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
839 limit.rlim_max = 5000000;
840 limit.rlim_cur = limit.rlim_max;
841 if (setrlimit (RLIMIT_DATA, &limit) < 0)
844 /* On Linux systems, malloc() is limited by RLIMIT_AS. */
846 if (getrlimit (RLIMIT_AS, &limit) < 0)
848 if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
849 limit.rlim_max = 5000000;
850 limit.rlim_cur = limit.rlim_max;
851 if (setrlimit (RLIMIT_AS, &limit) < 0)
854 /* Some printf implementations allocate temporary space on the stack. */
856 if (getrlimit (RLIMIT_STACK, &limit) < 0)
858 if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
859 limit.rlim_max = 5000000;
860 limit.rlim_cur = limit.rlim_max;
861 if (setrlimit (RLIMIT_STACK, &limit) < 0)
864 ret = printf ("%.5000000f", 1.0);
865 return !(ret == 5000002 || (ret < 0 && errno == ENOMEM));
869 if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
872 if test $result != 0 && test $result != 77; then result=1; fi
874 ) >/dev/null 2>/dev/null
876 0) gl_cv_func_printf_enomem="yes" ;;
877 77) gl_cv_func_printf_enomem="guessing no" ;;
878 *) gl_cv_func_printf_enomem="no" ;;
881 gl_cv_func_printf_enomem="guessing no"
885 if test "$gl_cv_func_printf_enomem" = "guessing no"; then
888 # Guess yes on glibc systems.
889 *-gnu*) gl_cv_func_printf_enomem="guessing yes";;
890 # Guess yes on Solaris.
891 solaris*) gl_cv_func_printf_enomem="guessing yes";;
893 aix*) gl_cv_func_printf_enomem="guessing yes";;
894 # Guess yes on HP-UX/hppa.
895 hpux*) case "$host_cpu" in
896 hppa*) gl_cv_func_printf_enomem="guessing yes";;
897 *) gl_cv_func_printf_enomem="guessing no";;
901 irix*) gl_cv_func_printf_enomem="guessing yes";;
902 # Guess yes on OSF/1.
903 osf*) gl_cv_func_printf_enomem="guessing yes";;
905 beos*) gl_cv_func_printf_enomem="guessing yes";;
906 # Guess yes on Haiku.
907 haiku*) gl_cv_func_printf_enomem="guessing yes";;
908 # If we don't know, assume the worst.
909 *) gl_cv_func_printf_enomem="guessing no";;
916 dnl Test whether the snprintf function exists. (ISO C99, POSIX:2001)
917 dnl Result is ac_cv_func_snprintf.
919 AC_DEFUN([gl_SNPRINTF_PRESENCE],
921 AC_CHECK_FUNCS_ONCE([snprintf])
924 dnl Test whether the string produced by the snprintf function is always NUL
925 dnl terminated. (ISO C99, POSIX:2001)
926 dnl Result is gl_cv_func_snprintf_truncation_c99.
928 AC_DEFUN([gl_SNPRINTF_TRUNCATION_C99],
930 AC_REQUIRE([AC_PROG_CC])
931 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
932 AC_CACHE_CHECK([whether snprintf truncates the result as in C99],
933 [gl_cv_func_snprintf_truncation_c99],
938 static char buf[100];
941 strcpy (buf, "ABCDEF");
942 snprintf (buf, 3, "%d %d", 4567, 89);
943 if (memcmp (buf, "45\0DEF", 6) != 0)
946 }], [gl_cv_func_snprintf_truncation_c99=yes], [gl_cv_func_snprintf_truncation_c99=no],
950 # Guess yes on glibc systems.
951 *-gnu*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
952 # Guess yes on FreeBSD >= 5.
953 freebsd[1-4]*) gl_cv_func_snprintf_truncation_c99="guessing no";;
954 freebsd* | kfreebsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
955 # Guess yes on MacOS X >= 10.3.
956 darwin[1-6].*) gl_cv_func_snprintf_truncation_c99="guessing no";;
957 darwin*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
958 # Guess yes on OpenBSD >= 3.9.
959 openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*)
960 gl_cv_func_snprintf_truncation_c99="guessing no";;
961 openbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
962 # Guess yes on Solaris >= 2.6.
963 solaris2.[0-5]*) gl_cv_func_snprintf_truncation_c99="guessing no";;
964 solaris*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
965 # Guess yes on AIX >= 4.
966 aix[1-3]*) gl_cv_func_snprintf_truncation_c99="guessing no";;
967 aix*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
968 # Guess yes on HP-UX >= 11.
969 hpux[7-9]* | hpux10*) gl_cv_func_snprintf_truncation_c99="guessing no";;
970 hpux*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
971 # Guess yes on IRIX >= 6.5.
972 irix6.5) gl_cv_func_snprintf_truncation_c99="guessing yes";;
973 # Guess yes on OSF/1 >= 5.
974 osf[3-4]*) gl_cv_func_snprintf_truncation_c99="guessing no";;
975 osf*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
976 # Guess yes on NetBSD >= 3.
977 netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
978 gl_cv_func_snprintf_truncation_c99="guessing no";;
979 netbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
981 beos*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
982 # If we don't know, assume the worst.
983 *) gl_cv_func_snprintf_truncation_c99="guessing no";;
990 dnl Test whether the return value of the snprintf function is the number
991 dnl of bytes (excluding the terminating NUL) that would have been produced
992 dnl if the buffer had been large enough. (ISO C99, POSIX:2001)
993 dnl For example, this test program fails on IRIX 6.5:
994 dnl ---------------------------------------------------------------------
995 dnl #include <stdio.h>
998 dnl static char buf[8];
999 dnl int retval = snprintf (buf, 3, "%d", 12345);
1000 dnl return retval >= 0 && retval < 3;
1002 dnl ---------------------------------------------------------------------
1003 dnl Result is gl_cv_func_snprintf_retval_c99.
1005 AC_DEFUN([gl_SNPRINTF_RETVAL_C99],
1007 AC_REQUIRE([AC_PROG_CC])
1008 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
1009 AC_CACHE_CHECK([whether snprintf returns a byte count as in C99],
1010 [gl_cv_func_snprintf_retval_c99],
1015 static char buf[100];
1018 strcpy (buf, "ABCDEF");
1019 if (snprintf (buf, 3, "%d %d", 4567, 89) != 7)
1022 }], [gl_cv_func_snprintf_retval_c99=yes], [gl_cv_func_snprintf_retval_c99=no],
1026 # Guess yes on glibc systems.
1027 *-gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";;
1028 # Guess yes on FreeBSD >= 5.
1029 freebsd[1-4]*) gl_cv_func_snprintf_retval_c99="guessing no";;
1030 freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";;
1031 # Guess yes on MacOS X >= 10.3.
1032 darwin[1-6].*) gl_cv_func_snprintf_retval_c99="guessing no";;
1033 darwin*) gl_cv_func_snprintf_retval_c99="guessing yes";;
1034 # Guess yes on OpenBSD >= 3.9.
1035 openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*)
1036 gl_cv_func_snprintf_retval_c99="guessing no";;
1037 openbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";;
1038 # Guess yes on Solaris >= 2.6.
1039 solaris2.[0-5]*) gl_cv_func_snprintf_retval_c99="guessing no";;
1040 solaris*) gl_cv_func_snprintf_retval_c99="guessing yes";;
1041 # Guess yes on AIX >= 4.
1042 aix[1-3]*) gl_cv_func_snprintf_retval_c99="guessing no";;
1043 aix*) gl_cv_func_snprintf_retval_c99="guessing yes";;
1044 # Guess yes on NetBSD >= 3.
1045 netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
1046 gl_cv_func_snprintf_retval_c99="guessing no";;
1047 netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";;
1048 # Guess yes on BeOS.
1049 beos*) gl_cv_func_snprintf_retval_c99="guessing yes";;
1050 # If we don't know, assume the worst.
1051 *) gl_cv_func_snprintf_retval_c99="guessing no";;
1058 dnl Test whether the snprintf function supports the %n format directive
1059 dnl also in truncated portions of the format string. (ISO C99, POSIX:2001)
1060 dnl Result is gl_cv_func_snprintf_directive_n.
1062 AC_DEFUN([gl_SNPRINTF_DIRECTIVE_N],
1064 AC_REQUIRE([AC_PROG_CC])
1065 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
1066 AC_CACHE_CHECK([whether snprintf fully supports the 'n' directive],
1067 [gl_cv_func_snprintf_directive_n],
1072 static char fmtstring[10];
1073 static char buf[100];
1077 /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2)
1078 support %n in format strings in read-only memory but not in writable
1080 strcpy (fmtstring, "%d %n");
1081 snprintf (buf, 4, fmtstring, 12345, &count, 33, 44, 55);
1085 }], [gl_cv_func_snprintf_directive_n=yes], [gl_cv_func_snprintf_directive_n=no],
1089 # Guess yes on glibc systems.
1090 *-gnu*) gl_cv_func_snprintf_directive_n="guessing yes";;
1091 # Guess yes on FreeBSD >= 5.
1092 freebsd[1-4]*) gl_cv_func_snprintf_directive_n="guessing no";;
1093 freebsd* | kfreebsd*) gl_cv_func_snprintf_directive_n="guessing yes";;
1094 # Guess yes on MacOS X >= 10.3.
1095 darwin[1-6].*) gl_cv_func_snprintf_directive_n="guessing no";;
1096 darwin*) gl_cv_func_snprintf_directive_n="guessing yes";;
1097 # Guess yes on Solaris >= 2.6.
1098 solaris2.[0-5]*) gl_cv_func_snprintf_directive_n="guessing no";;
1099 solaris*) gl_cv_func_snprintf_directive_n="guessing yes";;
1100 # Guess yes on AIX >= 4.
1101 aix[1-3]*) gl_cv_func_snprintf_directive_n="guessing no";;
1102 aix*) gl_cv_func_snprintf_directive_n="guessing yes";;
1103 # Guess yes on IRIX >= 6.5.
1104 irix6.5) gl_cv_func_snprintf_directive_n="guessing yes";;
1105 # Guess yes on OSF/1 >= 5.
1106 osf[3-4]*) gl_cv_func_snprintf_directive_n="guessing no";;
1107 osf*) gl_cv_func_snprintf_directive_n="guessing yes";;
1108 # Guess yes on NetBSD >= 3.
1109 netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
1110 gl_cv_func_snprintf_directive_n="guessing no";;
1111 netbsd*) gl_cv_func_snprintf_directive_n="guessing yes";;
1112 # Guess yes on BeOS.
1113 beos*) gl_cv_func_snprintf_directive_n="guessing yes";;
1114 # If we don't know, assume the worst.
1115 *) gl_cv_func_snprintf_directive_n="guessing no";;
1122 dnl Test whether the snprintf function, when passed a size = 1, writes any
1123 dnl output without bounds in this case, behaving like sprintf. This is the
1124 dnl case on Linux libc5.
1125 dnl Result is gl_cv_func_snprintf_size1.
1127 AC_DEFUN([gl_SNPRINTF_SIZE1],
1129 AC_REQUIRE([AC_PROG_CC])
1130 AC_CACHE_CHECK([whether snprintf respects a size of 1],
1131 [gl_cv_func_snprintf_size1],
1137 static char buf[8] = "DEADBEEF";
1138 snprintf (buf, 1, "%d", 12345);
1139 return buf[1] != 'E';
1141 [gl_cv_func_snprintf_size1=yes],
1142 [gl_cv_func_snprintf_size1=no],
1143 [gl_cv_func_snprintf_size1="guessing yes"])
1147 dnl Test whether the vsnprintf function, when passed a zero size, produces no
1148 dnl output. (ISO C99, POSIX:2001)
1149 dnl For example, snprintf nevertheless writes a NUL byte in this case
1151 dnl ---------------------------------------------------------------------
1152 dnl #include <stdio.h>
1155 dnl static char buf[8] = "DEADBEEF";
1156 dnl snprintf (buf, 0, "%d", 12345);
1157 dnl return buf[0] != 'D';
1159 dnl ---------------------------------------------------------------------
1160 dnl And vsnprintf writes any output without bounds in this case, behaving like
1161 dnl vsprintf, on HP-UX 11 and OSF/1 5.1:
1162 dnl ---------------------------------------------------------------------
1163 dnl #include <stdarg.h>
1164 dnl #include <stdio.h>
1165 dnl static int my_snprintf (char *buf, int size, const char *format, ...)
1169 dnl va_start (args, format);
1170 dnl ret = vsnprintf (buf, size, format, args);
1176 dnl static char buf[8] = "DEADBEEF";
1177 dnl my_snprintf (buf, 0, "%d", 12345);
1178 dnl return buf[0] != 'D';
1180 dnl ---------------------------------------------------------------------
1181 dnl Result is gl_cv_func_vsnprintf_zerosize_c99.
1183 AC_DEFUN([gl_VSNPRINTF_ZEROSIZE_C99],
1185 AC_REQUIRE([AC_PROG_CC])
1186 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
1187 AC_CACHE_CHECK([whether vsnprintf respects a zero size as in C99],
1188 [gl_cv_func_vsnprintf_zerosize_c99],
1193 static int my_snprintf (char *buf, int size, const char *format, ...)
1197 va_start (args, format);
1198 ret = vsnprintf (buf, size, format, args);
1204 static char buf[8] = "DEADBEEF";
1205 my_snprintf (buf, 0, "%d", 12345);
1206 return buf[0] != 'D';
1208 [gl_cv_func_vsnprintf_zerosize_c99=yes],
1209 [gl_cv_func_vsnprintf_zerosize_c99=no],
1213 # Guess yes on glibc systems.
1214 *-gnu*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
1215 # Guess yes on FreeBSD >= 5.
1216 freebsd[1-4]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
1217 freebsd* | kfreebsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
1218 # Guess yes on MacOS X >= 10.3.
1219 darwin[1-6].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
1220 darwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
1221 # Guess yes on Cygwin.
1222 cygwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
1223 # Guess yes on Solaris >= 2.6.
1224 solaris2.[0-5]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
1225 solaris*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
1226 # Guess yes on AIX >= 4.
1227 aix[1-3]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
1228 aix*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
1229 # Guess yes on IRIX >= 6.5.
1230 irix6.5) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
1231 # Guess yes on NetBSD >= 3.
1232 netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
1233 gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
1234 netbsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
1235 # Guess yes on BeOS.
1236 beos*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
1237 # Guess yes on mingw.
1238 mingw* | pw*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
1239 # If we don't know, assume the worst.
1240 *) gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
1247 dnl The results of these tests on various platforms are:
1249 dnl 1 = gl_PRINTF_SIZES_C99
1250 dnl 2 = gl_PRINTF_LONG_DOUBLE
1251 dnl 3 = gl_PRINTF_INFINITE
1252 dnl 4 = gl_PRINTF_INFINITE_LONG_DOUBLE
1253 dnl 5 = gl_PRINTF_DIRECTIVE_A
1254 dnl 6 = gl_PRINTF_DIRECTIVE_F
1255 dnl 7 = gl_PRINTF_DIRECTIVE_N
1256 dnl 8 = gl_PRINTF_POSITIONS
1257 dnl 9 = gl_PRINTF_FLAG_GROUPING
1258 dnl 10 = gl_PRINTF_FLAG_LEFTADJUST
1259 dnl 11 = gl_PRINTF_FLAG_ZERO
1260 dnl 12 = gl_PRINTF_PRECISION
1261 dnl 13 = gl_PRINTF_ENOMEM
1262 dnl 14 = gl_SNPRINTF_PRESENCE
1263 dnl 15 = gl_SNPRINTF_TRUNCATION_C99
1264 dnl 16 = gl_SNPRINTF_RETVAL_C99
1265 dnl 17 = gl_SNPRINTF_DIRECTIVE_N
1266 dnl 18 = gl_SNPRINTF_SIZE1
1267 dnl 19 = gl_VSNPRINTF_ZEROSIZE_C99
1269 dnl 1 = checking whether printf supports size specifiers as in C99...
1270 dnl 2 = checking whether printf supports 'long double' arguments...
1271 dnl 3 = checking whether printf supports infinite 'double' arguments...
1272 dnl 4 = checking whether printf supports infinite 'long double' arguments...
1273 dnl 5 = checking whether printf supports the 'a' and 'A' directives...
1274 dnl 6 = checking whether printf supports the 'F' directive...
1275 dnl 7 = checking whether printf supports the 'n' directive...
1276 dnl 8 = checking whether printf supports POSIX/XSI format strings with positions...
1277 dnl 9 = checking whether printf supports the grouping flag...
1278 dnl 10 = checking whether printf supports the left-adjust flag correctly...
1279 dnl 11 = checking whether printf supports the zero flag correctly...
1280 dnl 12 = checking whether printf supports large precisions...
1281 dnl 13 = checking whether printf survives out-of-memory conditions...
1282 dnl 14 = checking for snprintf...
1283 dnl 15 = checking whether snprintf truncates the result as in C99...
1284 dnl 16 = checking whether snprintf returns a byte count as in C99...
1285 dnl 17 = checking whether snprintf fully supports the 'n' directive...
1286 dnl 18 = checking whether snprintf respects a size of 1...
1287 dnl 19 = checking whether vsnprintf respects a zero size as in C99...
1289 dnl . = yes, # = no.
1291 dnl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
1292 dnl glibc 2.5 . . . . . . . . . . . . . . . . . . .
1293 dnl glibc 2.3.6 . . . . # . . . . . . . . . . . . . .
1294 dnl FreeBSD 5.4, 6.1 . . . . # . . . . . # . # . . . . . .
1295 dnl MacOS X 10.3.9 . . . . # . . . . . # . # . . . . . .
1296 dnl OpenBSD 3.9, 4.0 . . # # # # . . # . # . # . . . . . .
1297 dnl Cygwin 2007 (= Cygwin 1.5.24) . . . . # # . . . ? # ? ? . . . . . .
1298 dnl Cygwin 2006 (= Cygwin 1.5.19) # . . . # # . . # ? # ? ? . . . . . .
1299 dnl Solaris 10 . . # # # . . . . . # . . . . . . . .
1300 dnl Solaris 2.6 ... 9 # . # # # # . . . . # . . . . . . . .
1301 dnl Solaris 2.5.1 # . # # # # . . . . # . . # # # # # #
1302 dnl AIX 5.2 . . # # # . . . . . # . . . . . . . .
1303 dnl AIX 4.3.2, 5.1 # . # # # # . . . . # . . . . . . . .
1304 dnl HP-UX 11.31 . . . . # . . . . . # . . . . # # . .
1305 dnl HP-UX 11.{00,11,23} # . . . # # . . . . # . . . . # # . #
1306 dnl HP-UX 10.20 # . . . # # . . . # # . . . . # # ? #
1307 dnl IRIX 6.5 # . # # # # . . . . # . . . . # . . .
1308 dnl OSF/1 5.1 # . # # # # . . . . # . . . . # . . #
1309 dnl OSF/1 4.0d # . # # # # . . . . # . . # # # # # #
1310 dnl NetBSD 4.0 . ? ? ? ? ? . . ? ? ? ? ? . . . ? ? ?
1311 dnl NetBSD 3.0 . . . . # # . # # ? # . # . . . . . .
1312 dnl Haiku . . . # # # . . . . . . ? . . . . . .
1313 dnl BeOS # # . # # # . # . ? . # ? . . . . . .
1314 dnl mingw # # # # # # . # # . # # ? . # # # . .