2 dnl Copyright (C) 2003, 2007 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],
247 strisnan (const char *string, size_t start_index, size_t end_index)
249 if (start_index < end_index)
251 if (string[start_index] == '-')
253 if (start_index + 3 <= end_index
254 && memcmp (string + start_index, "nan", 3) == 0)
257 if (start_index == end_index
258 || (string[start_index] == '(' && string[end_index - 1] == ')'))
264 static char buf[10000];
265 static long double zeroL = 0.0L;
268 if (sprintf (buf, "%Lf", 1.0L / 0.0L) < 0
269 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
271 if (sprintf (buf, "%Lf", -1.0L / 0.0L) < 0
272 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
274 if (sprintf (buf, "%Lf", zeroL / zeroL) < 0
275 || !strisnan (buf, 0, strlen (buf)))
277 if (sprintf (buf, "%Le", 1.0L / 0.0L) < 0
278 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
280 if (sprintf (buf, "%Le", -1.0L / 0.0L) < 0
281 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
283 if (sprintf (buf, "%Le", zeroL / zeroL) < 0
284 || !strisnan (buf, 0, strlen (buf)))
286 if (sprintf (buf, "%Lg", 1.0L / 0.0L) < 0
287 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
289 if (sprintf (buf, "%Lg", -1.0L / 0.0L) < 0
290 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
292 if (sprintf (buf, "%Lg", zeroL / zeroL) < 0
293 || !strisnan (buf, 0, strlen (buf)))
295 #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_))
296 /* Representation of an 80-bit 'long double' as an initializer for a sequence
297 of 'unsigned int' words. */
298 # ifdef WORDS_BIGENDIAN
299 # define LDBL80_WORDS(exponent,manthi,mantlo) \
300 { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \
301 ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16), \
302 (unsigned int) (mantlo) << 16 \
305 # define LDBL80_WORDS(exponent,manthi,mantlo) \
306 { mantlo, manthi, exponent }
309 static union { unsigned int word[4]; long double value; } x =
310 { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };
311 if (sprintf (buf, "%Lf", x.value) < 0
312 || !strisnan (buf, 0, strlen (buf)))
314 if (sprintf (buf, "%Le", x.value) < 0
315 || !strisnan (buf, 0, strlen (buf)))
317 if (sprintf (buf, "%Lg", x.value) < 0
318 || !strisnan (buf, 0, strlen (buf)))
322 /* Signalling NaN. */
323 static union { unsigned int word[4]; long double value; } x =
324 { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
325 if (sprintf (buf, "%Lf", x.value) < 0
326 || !strisnan (buf, 0, strlen (buf)))
328 if (sprintf (buf, "%Le", x.value) < 0
329 || !strisnan (buf, 0, strlen (buf)))
331 if (sprintf (buf, "%Lg", x.value) < 0
332 || !strisnan (buf, 0, strlen (buf)))
336 static union { unsigned int word[4]; long double value; } x =
337 { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
338 if (sprintf (buf, "%Lf", x.value) < 0
339 || !strisnan (buf, 0, strlen (buf)))
341 if (sprintf (buf, "%Le", x.value) < 0
342 || !strisnan (buf, 0, strlen (buf)))
344 if (sprintf (buf, "%Lg", x.value) < 0
345 || !strisnan (buf, 0, strlen (buf)))
348 { /* Pseudo-Infinity. */
349 static union { unsigned int word[4]; long double value; } x =
350 { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
351 if (sprintf (buf, "%Lf", x.value) < 0
352 || !strisnan (buf, 0, strlen (buf)))
354 if (sprintf (buf, "%Le", x.value) < 0
355 || !strisnan (buf, 0, strlen (buf)))
357 if (sprintf (buf, "%Lg", x.value) < 0
358 || !strisnan (buf, 0, strlen (buf)))
362 static union { unsigned int word[4]; long double value; } x =
363 { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
364 if (sprintf (buf, "%Lf", x.value) < 0
365 || !strisnan (buf, 0, strlen (buf)))
367 if (sprintf (buf, "%Le", x.value) < 0
368 || !strisnan (buf, 0, strlen (buf)))
370 if (sprintf (buf, "%Lg", x.value) < 0
371 || !strisnan (buf, 0, strlen (buf)))
374 { /* Unnormalized number. */
375 static union { unsigned int word[4]; long double value; } x =
376 { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
377 if (sprintf (buf, "%Lf", x.value) < 0
378 || !strisnan (buf, 0, strlen (buf)))
380 if (sprintf (buf, "%Le", x.value) < 0
381 || !strisnan (buf, 0, strlen (buf)))
383 if (sprintf (buf, "%Lg", x.value) < 0
384 || !strisnan (buf, 0, strlen (buf)))
387 { /* Pseudo-Denormal. */
388 static union { unsigned int word[4]; long double value; } x =
389 { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
390 if (sprintf (buf, "%Lf", x.value) < 0
391 || !strisnan (buf, 0, strlen (buf)))
393 if (sprintf (buf, "%Le", x.value) < 0
394 || !strisnan (buf, 0, strlen (buf)))
396 if (sprintf (buf, "%Lg", x.value) < 0
397 || !strisnan (buf, 0, strlen (buf)))
403 [gl_cv_func_printf_infinite_long_double=yes],
404 [gl_cv_func_printf_infinite_long_double=no],
408 # Guess no on ia64, x86_64, i386.
409 ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";;
412 # Guess yes on glibc systems.
413 *-gnu*) gl_cv_func_printf_infinite_long_double="guessing yes";;
414 # Guess yes on FreeBSD >= 6.
415 freebsd[1-5]*) gl_cv_func_printf_infinite_long_double="guessing no";;
416 freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";;
417 # Guess yes on MacOS X >= 10.3.
418 darwin[1-6].*) gl_cv_func_printf_infinite_long_double="guessing no";;
419 darwin*) gl_cv_func_printf_infinite_long_double="guessing yes";;
420 # Guess yes on HP-UX >= 11.
421 hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";;
422 hpux*) gl_cv_func_printf_infinite_long_double="guessing yes";;
423 # Guess yes on NetBSD >= 3.
424 netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
425 gl_cv_func_printf_infinite_long_double="guessing no";;
426 netbsd*) gl_cv_func_printf_infinite_long_double="guessing yes";;
427 # If we don't know, assume the worst.
428 *) gl_cv_func_printf_infinite_long_double="guessing no";;
437 gl_cv_func_printf_infinite_long_double="irrelevant"
442 dnl Test whether the *printf family of functions supports the 'a' and 'A'
443 dnl conversion specifier for hexadecimal output of floating-point numbers.
444 dnl (ISO C99, POSIX:2001)
445 dnl Result is gl_cv_func_printf_directive_a.
447 AC_DEFUN([gl_PRINTF_DIRECTIVE_A],
449 AC_REQUIRE([AC_PROG_CC])
450 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
451 AC_CACHE_CHECK([whether printf supports the 'a' and 'A' directives],
452 [gl_cv_func_printf_directive_a],
457 static char buf[100];
460 if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0
461 || (strcmp (buf, "0x1.922p+1 33") != 0
462 && strcmp (buf, "0x3.244p+0 33") != 0
463 && strcmp (buf, "0x6.488p-1 33") != 0
464 && strcmp (buf, "0xc.91p-2 33") != 0))
466 if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0
467 || (strcmp (buf, "-0X1.922P+1 33") != 0
468 && strcmp (buf, "-0X3.244P+0 33") != 0
469 && strcmp (buf, "-0X6.488P-1 33") != 0
470 && strcmp (buf, "-0XC.91P-2 33") != 0))
472 /* This catches a FreeBSD 6.1 bug: it doesn't round. */
473 if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0
474 || (strcmp (buf, "0x1.83p+0 33") != 0
475 && strcmp (buf, "0x3.05p-1 33") != 0
476 && strcmp (buf, "0x6.0ap-2 33") != 0
477 && strcmp (buf, "0xc.14p-3 33") != 0))
479 /* This catches a FreeBSD 6.1 bug. See
480 <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
481 if (sprintf (buf, "%010a %d", 1.0 / 0.0, 33, 44, 55) < 0
484 /* This catches a MacOS X 10.3.9 (Darwin 7.9) bug. */
485 if (sprintf (buf, "%.1a", 1.999) < 0
486 || (strcmp (buf, "0x1.0p+1") != 0
487 && strcmp (buf, "0x2.0p+0") != 0
488 && strcmp (buf, "0x4.0p-1") != 0
489 && strcmp (buf, "0x8.0p-2") != 0))
491 /* This catches the same MacOS X 10.3.9 (Darwin 7.9) bug and also a
492 glibc 2.4 bug <http://sourceware.org/bugzilla/show_bug.cgi?id=2908>. */
493 if (sprintf (buf, "%.1La", 1.999L) < 0
494 || (strcmp (buf, "0x1.0p+1") != 0
495 && strcmp (buf, "0x2.0p+0") != 0
496 && strcmp (buf, "0x4.0p-1") != 0
497 && strcmp (buf, "0x8.0p-2") != 0))
500 }], [gl_cv_func_printf_directive_a=yes], [gl_cv_func_printf_directive_a=no],
503 # Guess yes on glibc >= 2.5 systems.
505 AC_EGREP_CPP([BZ2908], [
506 #include <features.h>
507 #ifdef __GNU_LIBRARY__
508 #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 5) || (__GLIBC__ > 2)
513 [gl_cv_func_printf_directive_a="guessing yes"],
514 [gl_cv_func_printf_directive_a="guessing no"])
516 # If we don't know, assume the worst.
517 *) gl_cv_func_printf_directive_a="guessing no";;
523 dnl Test whether the *printf family of functions supports the %F format
524 dnl directive. (ISO C99, POSIX:2001)
525 dnl Result is gl_cv_func_printf_directive_f.
527 AC_DEFUN([gl_PRINTF_DIRECTIVE_F],
529 AC_REQUIRE([AC_PROG_CC])
530 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
531 AC_CACHE_CHECK([whether printf supports the 'F' directive],
532 [gl_cv_func_printf_directive_f],
537 static char buf[100];
540 if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0
541 || strcmp (buf, "1234567.000000 33") != 0)
543 if (sprintf (buf, "%F", 1.0 / 0.0) < 0
544 || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0))
546 /* This catches a Cygwin 2007 bug. */
547 if (sprintf (buf, "%.F", 1234.0) < 0
548 || strcmp (buf, "1234") != 0)
551 }], [gl_cv_func_printf_directive_f=yes], [gl_cv_func_printf_directive_f=no],
555 # Guess yes on glibc systems.
556 *-gnu*) gl_cv_func_printf_directive_f="guessing yes";;
557 # Guess yes on FreeBSD >= 6.
558 freebsd[1-5]*) gl_cv_func_printf_directive_f="guessing no";;
559 freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";;
560 # Guess yes on MacOS X >= 10.3.
561 darwin[1-6].*) gl_cv_func_printf_directive_f="guessing no";;
562 darwin*) gl_cv_func_printf_directive_f="guessing yes";;
563 # Guess yes on Solaris >= 2.10.
564 solaris2.[0-9]*) gl_cv_func_printf_directive_f="guessing no";;
565 solaris*) gl_cv_func_printf_directive_f="guessing yes";;
566 # If we don't know, assume the worst.
567 *) gl_cv_func_printf_directive_f="guessing no";;
574 dnl Test whether the *printf family of functions supports the %n format
575 dnl directive. (ISO C99, POSIX:2001)
576 dnl Result is gl_cv_func_printf_directive_n.
578 AC_DEFUN([gl_PRINTF_DIRECTIVE_N],
580 AC_REQUIRE([AC_PROG_CC])
581 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
582 AC_CACHE_CHECK([whether printf supports the 'n' directive],
583 [gl_cv_func_printf_directive_n],
588 static char fmtstring[10];
589 static char buf[100];
593 /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2)
594 support %n in format strings in read-only memory but not in writable
596 strcpy (fmtstring, "%d %n");
597 if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0
598 || strcmp (buf, "123 ") != 0
602 }], [gl_cv_func_printf_directive_n=yes], [gl_cv_func_printf_directive_n=no],
606 *) gl_cv_func_printf_directive_n="guessing yes";;
613 dnl Test whether the *printf family of functions supports POSIX/XSI format
614 dnl strings with positions. (POSIX:2001)
615 dnl Result is gl_cv_func_printf_positions.
617 AC_DEFUN([gl_PRINTF_POSITIONS],
619 AC_REQUIRE([AC_PROG_CC])
620 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
621 AC_CACHE_CHECK([whether printf supports POSIX/XSI format strings with positions],
622 [gl_cv_func_printf_positions],
627 /* The string "%2$d %1$d", with dollar characters protected from the shell's
628 dollar expansion (possibly an autoconf bug). */
629 static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
630 static char buf[100];
633 sprintf (buf, format, 33, 55);
634 return (strcmp (buf, "55 33") != 0);
635 }], [gl_cv_func_printf_positions=yes], [gl_cv_func_printf_positions=no],
639 netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*)
640 gl_cv_func_printf_positions="guessing no";;
641 beos*) gl_cv_func_printf_positions="guessing no";;
642 mingw* | pw*) gl_cv_func_printf_positions="guessing no";;
643 *) gl_cv_func_printf_positions="guessing yes";;
650 dnl Test whether the *printf family of functions supports POSIX/XSI format
651 dnl strings with the ' flag for grouping of decimal digits. (POSIX:2001)
652 dnl Result is gl_cv_func_printf_flag_grouping.
654 AC_DEFUN([gl_PRINTF_FLAG_GROUPING],
656 AC_REQUIRE([AC_PROG_CC])
657 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
658 AC_CACHE_CHECK([whether printf supports the grouping flag],
659 [gl_cv_func_printf_flag_grouping],
664 static char buf[100];
667 if (sprintf (buf, "%'d %d", 1234567, 99) < 0
668 || buf[strlen (buf) - 1] != '9')
671 }], [gl_cv_func_printf_flag_grouping=yes], [gl_cv_func_printf_flag_grouping=no],
675 cygwin*) gl_cv_func_printf_flag_grouping="guessing no";;
676 netbsd*) gl_cv_func_printf_flag_grouping="guessing no";;
677 mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";;
678 *) gl_cv_func_printf_flag_grouping="guessing yes";;
685 dnl Test whether the *printf family of functions supports padding of non-finite
686 dnl values with the 0 flag correctly. (ISO C99 + TC1 + TC2.) See
687 dnl <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html>
688 dnl Result is gl_cv_func_printf_flag_zero.
690 AC_DEFUN([gl_PRINTF_FLAG_ZERO],
692 AC_REQUIRE([AC_PROG_CC])
693 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
694 AC_CACHE_CHECK([whether printf supports the zero flag correctly],
695 [gl_cv_func_printf_flag_zero],
700 static char buf[100];
703 if (sprintf (buf, "%010f", 1.0 / 0.0, 33, 44, 55) < 0
704 || (strcmp (buf, " inf") != 0
705 && strcmp (buf, " infinity") != 0))
708 }], [gl_cv_func_printf_flag_zero=yes], [gl_cv_func_printf_flag_zero=no],
712 # Guess yes on glibc systems.
713 *-gnu*) gl_cv_func_printf_flag_zero="guessing yes";;
715 beos*) gl_cv_func_printf_flag_zero="guessing yes";;
716 # If we don't know, assume the worst.
717 *) gl_cv_func_printf_flag_zero="guessing no";;
724 dnl Test whether the *printf family of functions supports large precisions.
725 dnl On mingw, precisions larger than 512 are treated like 512, in integer,
726 dnl floating-point or pointer output. On BeOS, precisions larger than 1044
727 dnl crash the program.
728 dnl Result is gl_cv_func_printf_precision.
730 AC_DEFUN([gl_PRINTF_PRECISION],
732 AC_REQUIRE([AC_PROG_CC])
733 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
734 AC_CACHE_CHECK([whether printf supports large precisions],
735 [gl_cv_func_printf_precision],
740 static char buf[5000];
744 /* On BeOS, this would crash and show a dialog box. Avoid the crash. */
747 if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3)
750 }], [gl_cv_func_printf_precision=yes], [gl_cv_func_printf_precision=no],
754 # Guess no only on native Win32 and BeOS systems.
755 mingw* | pw*) gl_cv_func_printf_precision="guessing no" ;;
756 beos*) gl_cv_func_printf_precision="guessing no" ;;
757 *) gl_cv_func_printf_precision="guessing yes" ;;
764 dnl Test whether the *printf family of functions recovers gracefully in case
765 dnl of an out-of-memory condition, or whether it crashes the entire program.
766 dnl Result is gl_cv_func_printf_enomem.
768 AC_DEFUN([gl_PRINTF_ENOMEM],
770 AC_REQUIRE([AC_PROG_CC])
771 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
772 AC_CACHE_CHECK([whether printf survives out-of-memory conditions],
773 [gl_cv_func_printf_enomem],
775 if test "$cross_compiling" = no; then
776 AC_LANG_CONFTEST([AC_LANG_SOURCE([
780 #include <sys/types.h>
781 #include <sys/time.h>
782 #include <sys/resource.h>
789 /* Some printf implementations allocate temporary space with malloc. */
790 /* On BSD systems, malloc() is limited by RLIMIT_DATA. */
792 if (getrlimit (RLIMIT_DATA, &limit) < 0)
794 if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
795 limit.rlim_max = 5000000;
796 limit.rlim_cur = limit.rlim_max;
797 if (setrlimit (RLIMIT_DATA, &limit) < 0)
800 /* On Linux systems, malloc() is limited by RLIMIT_AS. */
802 if (getrlimit (RLIMIT_AS, &limit) < 0)
804 if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
805 limit.rlim_max = 5000000;
806 limit.rlim_cur = limit.rlim_max;
807 if (setrlimit (RLIMIT_AS, &limit) < 0)
810 /* Some printf implementations allocate temporary space on the stack. */
812 if (getrlimit (RLIMIT_STACK, &limit) < 0)
814 if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
815 limit.rlim_max = 5000000;
816 limit.rlim_cur = limit.rlim_max;
817 if (setrlimit (RLIMIT_STACK, &limit) < 0)
820 ret = printf ("%.5000000f", 1.0);
821 return !(ret == 5000002 || (ret < 0 && errno == ENOMEM));
825 if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
828 if test $result != 0 && test $result != 77; then result=1; fi
830 ) >/dev/null 2>/dev/null
832 0) gl_cv_func_printf_enomem="yes" ;;
833 77) gl_cv_func_printf_enomem="guessing no" ;;
834 *) gl_cv_func_printf_enomem="no" ;;
837 gl_cv_func_printf_enomem="guessing no"
843 # Guess yes on glibc systems.
844 *-gnu*) gl_cv_func_printf_enomem="guessing yes";;
845 # Guess yes on Solaris.
846 solaris*) gl_cv_func_printf_enomem="guessing yes";;
848 aix*) gl_cv_func_printf_enomem="guessing yes";;
849 # Guess yes on HP-UX/hppa.
850 hpux*) case "$host_cpu" in
851 hppa*) gl_cv_func_printf_enomem="guessing yes";;
852 *) gl_cv_func_printf_enomem="guessing no";;
856 irix*) gl_cv_func_printf_enomem="guessing yes";;
857 # Guess yes on OSF/1.
858 osf*) gl_cv_func_printf_enomem="guessing yes";;
860 beos*) gl_cv_func_printf_enomem="guessing yes";;
861 # If we don't know, assume the worst.
862 *) gl_cv_func_printf_enomem="guessing no";;
869 dnl Test whether the snprintf function exists. (ISO C99, POSIX:2001)
870 dnl Result is ac_cv_func_snprintf.
872 AC_DEFUN([gl_SNPRINTF_PRESENCE],
874 AC_CHECK_FUNCS_ONCE([snprintf])
877 dnl Test whether the string produced by the snprintf function is always NUL
878 dnl terminated. (ISO C99, POSIX:2001)
879 dnl Result is gl_cv_func_snprintf_truncation_c99.
881 AC_DEFUN([gl_SNPRINTF_TRUNCATION_C99],
883 AC_REQUIRE([AC_PROG_CC])
884 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
885 AC_CACHE_CHECK([whether snprintf truncates the result as in C99],
886 [gl_cv_func_snprintf_truncation_c99],
891 static char buf[100];
894 strcpy (buf, "ABCDEF");
895 snprintf (buf, 3, "%d %d", 4567, 89);
896 if (memcmp (buf, "45\0DEF", 6) != 0)
899 }], [gl_cv_func_snprintf_truncation_c99=yes], [gl_cv_func_snprintf_truncation_c99=no],
903 # Guess yes on glibc systems.
904 *-gnu*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
905 # Guess yes on FreeBSD >= 5.
906 freebsd[1-4]*) gl_cv_func_snprintf_truncation_c99="guessing no";;
907 freebsd* | kfreebsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
908 # Guess yes on MacOS X >= 10.3.
909 darwin[1-6].*) gl_cv_func_snprintf_truncation_c99="guessing no";;
910 darwin*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
911 # Guess yes on OpenBSD >= 3.9.
912 openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*)
913 gl_cv_func_snprintf_truncation_c99="guessing no";;
914 openbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
915 # Guess yes on Solaris >= 2.6.
916 solaris2.[0-5]*) gl_cv_func_snprintf_truncation_c99="guessing no";;
917 solaris*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
918 # Guess yes on AIX >= 4.
919 aix[1-3]*) gl_cv_func_snprintf_truncation_c99="guessing no";;
920 aix*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
921 # Guess yes on HP-UX >= 11.
922 hpux[7-9]* | hpux10*) gl_cv_func_snprintf_truncation_c99="guessing no";;
923 hpux*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
924 # Guess yes on IRIX >= 6.5.
925 irix6.5) gl_cv_func_snprintf_truncation_c99="guessing yes";;
926 # Guess yes on OSF/1 >= 5.
927 osf[3-4]*) gl_cv_func_snprintf_truncation_c99="guessing no";;
928 osf*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
929 # Guess yes on NetBSD >= 3.
930 netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
931 gl_cv_func_snprintf_truncation_c99="guessing no";;
932 netbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
934 beos*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
935 # If we don't know, assume the worst.
936 *) gl_cv_func_snprintf_truncation_c99="guessing no";;
943 dnl Test whether the return value of the snprintf function is the number
944 dnl of bytes (excluding the terminating NUL) that would have been produced
945 dnl if the buffer had been large enough. (ISO C99, POSIX:2001)
946 dnl For example, this test program fails on IRIX 6.5:
947 dnl ---------------------------------------------------------------------
948 dnl #include <stdio.h>
951 dnl static char buf[8];
952 dnl int retval = snprintf (buf, 3, "%d", 12345);
953 dnl return retval >= 0 && retval < 3;
955 dnl ---------------------------------------------------------------------
956 dnl Result is gl_cv_func_snprintf_retval_c99.
958 AC_DEFUN([gl_SNPRINTF_RETVAL_C99],
960 AC_REQUIRE([AC_PROG_CC])
961 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
962 AC_CACHE_CHECK([whether snprintf returns a byte count as in C99],
963 [gl_cv_func_snprintf_retval_c99],
968 static char buf[100];
971 strcpy (buf, "ABCDEF");
972 if (snprintf (buf, 3, "%d %d", 4567, 89) != 7)
975 }], [gl_cv_func_snprintf_retval_c99=yes], [gl_cv_func_snprintf_retval_c99=no],
979 # Guess yes on glibc systems.
980 *-gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";;
981 # Guess yes on FreeBSD >= 5.
982 freebsd[1-4]*) gl_cv_func_snprintf_retval_c99="guessing no";;
983 freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";;
984 # Guess yes on MacOS X >= 10.3.
985 darwin[1-6].*) gl_cv_func_snprintf_retval_c99="guessing no";;
986 darwin*) gl_cv_func_snprintf_retval_c99="guessing yes";;
987 # Guess yes on OpenBSD >= 3.9.
988 openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*)
989 gl_cv_func_snprintf_retval_c99="guessing no";;
990 openbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";;
991 # Guess yes on Solaris >= 2.6.
992 solaris2.[0-5]*) gl_cv_func_snprintf_retval_c99="guessing no";;
993 solaris*) gl_cv_func_snprintf_retval_c99="guessing yes";;
994 # Guess yes on AIX >= 4.
995 aix[1-3]*) gl_cv_func_snprintf_retval_c99="guessing no";;
996 aix*) gl_cv_func_snprintf_retval_c99="guessing yes";;
997 # Guess yes on NetBSD >= 3.
998 netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
999 gl_cv_func_snprintf_retval_c99="guessing no";;
1000 netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";;
1001 # Guess yes on BeOS.
1002 beos*) gl_cv_func_snprintf_retval_c99="guessing yes";;
1003 # If we don't know, assume the worst.
1004 *) gl_cv_func_snprintf_retval_c99="guessing no";;
1011 dnl Test whether the snprintf function supports the %n format directive
1012 dnl also in truncated portions of the format string. (ISO C99, POSIX:2001)
1013 dnl Result is gl_cv_func_snprintf_directive_n.
1015 AC_DEFUN([gl_SNPRINTF_DIRECTIVE_N],
1017 AC_REQUIRE([AC_PROG_CC])
1018 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
1019 AC_CACHE_CHECK([whether snprintf fully supports the 'n' directive],
1020 [gl_cv_func_snprintf_directive_n],
1025 static char fmtstring[10];
1026 static char buf[100];
1030 /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2)
1031 support %n in format strings in read-only memory but not in writable
1033 strcpy (fmtstring, "%d %n");
1034 snprintf (buf, 4, fmtstring, 12345, &count, 33, 44, 55);
1038 }], [gl_cv_func_snprintf_directive_n=yes], [gl_cv_func_snprintf_directive_n=no],
1042 # Guess yes on glibc systems.
1043 *-gnu*) gl_cv_func_snprintf_directive_n="guessing yes";;
1044 # Guess yes on FreeBSD >= 5.
1045 freebsd[1-4]*) gl_cv_func_snprintf_directive_n="guessing no";;
1046 freebsd* | kfreebsd*) gl_cv_func_snprintf_directive_n="guessing yes";;
1047 # Guess yes on MacOS X >= 10.3.
1048 darwin[1-6].*) gl_cv_func_snprintf_directive_n="guessing no";;
1049 darwin*) gl_cv_func_snprintf_directive_n="guessing yes";;
1050 # Guess yes on Solaris >= 2.6.
1051 solaris2.[0-5]*) gl_cv_func_snprintf_directive_n="guessing no";;
1052 solaris*) gl_cv_func_snprintf_directive_n="guessing yes";;
1053 # Guess yes on AIX >= 4.
1054 aix[1-3]*) gl_cv_func_snprintf_directive_n="guessing no";;
1055 aix*) gl_cv_func_snprintf_directive_n="guessing yes";;
1056 # Guess yes on IRIX >= 6.5.
1057 irix6.5) gl_cv_func_snprintf_directive_n="guessing yes";;
1058 # Guess yes on OSF/1 >= 5.
1059 osf[3-4]*) gl_cv_func_snprintf_directive_n="guessing no";;
1060 osf*) gl_cv_func_snprintf_directive_n="guessing yes";;
1061 # Guess yes on NetBSD >= 3.
1062 netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
1063 gl_cv_func_snprintf_directive_n="guessing no";;
1064 netbsd*) gl_cv_func_snprintf_directive_n="guessing yes";;
1065 # Guess yes on BeOS.
1066 beos*) gl_cv_func_snprintf_directive_n="guessing yes";;
1067 # If we don't know, assume the worst.
1068 *) gl_cv_func_snprintf_directive_n="guessing no";;
1075 dnl Test whether the vsnprintf function, when passed a zero size, produces no
1076 dnl output. (ISO C99, POSIX:2001)
1077 dnl For example, snprintf nevertheless writes a NUL byte in this case
1079 dnl ---------------------------------------------------------------------
1080 dnl #include <stdio.h>
1083 dnl static char buf[8] = "DEADBEEF";
1084 dnl snprintf (buf, 0, "%d", 12345);
1085 dnl return buf[0] != 'D';
1087 dnl ---------------------------------------------------------------------
1088 dnl And vsnprintf writes any output without bounds in this case, behaving like
1089 dnl vsprintf, on HP-UX 11 and OSF/1 5.1:
1090 dnl ---------------------------------------------------------------------
1091 dnl #include <stdarg.h>
1092 dnl #include <stdio.h>
1093 dnl static int my_snprintf (char *buf, int size, const char *format, ...)
1097 dnl va_start (args, format);
1098 dnl ret = vsnprintf (buf, size, format, args);
1104 dnl static char buf[8] = "DEADBEEF";
1105 dnl my_snprintf (buf, 0, "%d", 12345);
1106 dnl return buf[0] != 'D';
1108 dnl ---------------------------------------------------------------------
1109 dnl Result is gl_cv_func_vsnprintf_zerosize_c99.
1111 AC_DEFUN([gl_VSNPRINTF_ZEROSIZE_C99],
1113 AC_REQUIRE([AC_PROG_CC])
1114 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
1115 AC_CACHE_CHECK([whether vsnprintf respects a zero size as in C99],
1116 [gl_cv_func_vsnprintf_zerosize_c99],
1121 static int my_snprintf (char *buf, int size, const char *format, ...)
1125 va_start (args, format);
1126 ret = vsnprintf (buf, size, format, args);
1132 static char buf[8] = "DEADBEEF";
1133 my_snprintf (buf, 0, "%d", 12345);
1134 return buf[0] != 'D';
1136 [gl_cv_func_vsnprintf_zerosize_c99=yes],
1137 [gl_cv_func_vsnprintf_zerosize_c99=no],
1141 # Guess yes on glibc systems.
1142 *-gnu*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
1143 # Guess yes on FreeBSD >= 5.
1144 freebsd[1-4]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
1145 freebsd* | kfreebsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
1146 # Guess yes on MacOS X >= 10.3.
1147 darwin[1-6].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
1148 darwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
1149 # Guess yes on Cygwin.
1150 cygwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
1151 # Guess yes on Solaris >= 2.6.
1152 solaris2.[0-5]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
1153 solaris*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
1154 # Guess yes on AIX >= 4.
1155 aix[1-3]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
1156 aix*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
1157 # Guess yes on IRIX >= 6.5.
1158 irix6.5) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
1159 # Guess yes on NetBSD >= 3.
1160 netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
1161 gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
1162 netbsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
1163 # Guess yes on BeOS.
1164 beos*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
1165 # Guess yes on mingw.
1166 mingw* | pw*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
1167 # If we don't know, assume the worst.
1168 *) gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
1175 dnl The results of these tests on various platforms are:
1177 dnl 1 = gl_PRINTF_SIZES_C99
1178 dnl 2 = gl_PRINTF_LONG_DOUBLE
1179 dnl 3 = gl_PRINTF_INFINITE
1180 dnl 4 = gl_PRINTF_INFINITE_LONG_DOUBLE
1181 dnl 5 = gl_PRINTF_DIRECTIVE_A
1182 dnl 6 = gl_PRINTF_DIRECTIVE_F
1183 dnl 7 = gl_PRINTF_DIRECTIVE_N
1184 dnl 8 = gl_PRINTF_POSITIONS
1185 dnl 9 = gl_PRINTF_FLAG_GROUPING
1186 dnl 10 = gl_PRINTF_FLAG_ZERO
1187 dnl 11 = gl_PRINTF_PRECISION
1188 dnl 12 = gl_PRINTF_ENOMEM
1189 dnl 13 = gl_SNPRINTF_PRESENCE
1190 dnl 14 = gl_SNPRINTF_TRUNCATION_C99
1191 dnl 15 = gl_SNPRINTF_RETVAL_C99
1192 dnl 16 = gl_SNPRINTF_DIRECTIVE_N
1193 dnl 17 = gl_VSNPRINTF_ZEROSIZE_C99
1195 dnl 1 = checking whether printf supports size specifiers as in C99...
1196 dnl 2 = checking whether printf supports 'long double' arguments...
1197 dnl 3 = checking whether printf supports infinite 'double' arguments...
1198 dnl 4 = checking whether printf supports infinite 'long double' arguments...
1199 dnl 5 = checking whether printf supports the 'a' and 'A' directives...
1200 dnl 6 = checking whether printf supports the 'F' directive...
1201 dnl 7 = checking whether printf supports the 'n' directive...
1202 dnl 8 = checking whether printf supports POSIX/XSI format strings with positions...
1203 dnl 9 = checking whether printf supports the grouping flag...
1204 dnl 10 = checking whether printf supports the zero flag correctly...
1205 dnl 11 = checking whether printf supports large precisions...
1206 dnl 12 = checking whether printf survives out-of-memory conditions...
1207 dnl 13 = checking for snprintf...
1208 dnl 14 = checking whether snprintf truncates the result as in C99...
1209 dnl 15 = checking whether snprintf returns a byte count as in C99...
1210 dnl 16 = checking whether snprintf fully supports the 'n' directive...
1211 dnl 17 = checking whether vsnprintf respects a zero size as in C99...
1213 dnl . = yes, # = no.
1215 dnl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
1216 dnl glibc 2.5 . . . . . . . . . . . . . . . . .
1217 dnl glibc 2.3.6 . . . . # . . . . . . . . . . . .
1218 dnl FreeBSD 5.4, 6.1 . . . . # . . . . # . # . . . . .
1219 dnl MacOS X 10.3.9 . . . . # . . . . # . # . . . . .
1220 dnl OpenBSD 3.9, 4.0 . ? ? ? # ? . . ? ? ? ? . . . ? ?
1221 dnl Cygwin 2007 (= Cygwin 1.5.24) . . . . # # . . . # ? ? . . . . .
1222 dnl Cygwin 2006 (= Cygwin 1.5.19) # . . . # # . . # # ? ? . . . . .
1223 dnl Solaris 10 . . # # # . . . . # . . . . . . .
1224 dnl Solaris 2.6 ... 9 # . # # # # . . . # . . . . . . .
1225 dnl Solaris 2.5.1 # . # # # # . . . # . . # # # # #
1226 dnl AIX 5.2 . . # # # . . . . # . . . . . . .
1227 dnl AIX 4.3.2, 5.1 # . # # # # . . . # . . . . . . .
1228 dnl HP-UX 11.31 . . . . # . . . . # . . . . # # .
1229 dnl HP-UX 10.20, 11.{00,11,23} # . . . # # . . . # . . . . # # #
1230 dnl IRIX 6.5 # . # # # # . . . # . . . . # . .
1231 dnl OSF/1 5.1 # . # # # # . . . # . . . . # . #
1232 dnl OSF/1 4.0d # . # # # # . . . # . . # # # # #
1233 dnl NetBSD 4.0 . ? ? ? ? ? . . ? ? ? ? . . . ? ?
1234 dnl NetBSD 3.0 . . . . # # . # # # . # . . . . .
1235 dnl BeOS # # . # # # . # . . # ? . . . . .
1236 dnl mingw # # # # # # . # # # # ? . # # # .