1997-04-19 19:22:31 +08:00
|
|
|
/* Based on code by Larry McVoy <lm@neteng.engr.sgi.com>. */
|
|
|
|
#include <printf.h>
|
|
|
|
#include <stdio.h>
|
2000-06-21 20:39:22 +08:00
|
|
|
#include <string.h>
|
Split DIAG_* macros to new header libc-diag.h.
Quite a few tests include libc-internal.h just for the DIAG_* macros.
Split those macros to their own file, which can be included safely in
_ISOMAC mode. I also moved ignore_value, since it seems logically
related, even though I didn't notice any tests needing it.
Also add -Wnonnull suppressions to two tests that _should_ have them,
but the error is masked when compiling against internal headers.
* include/libc-diag.h: New file. Define ignore_value,
DIAG_PUSH_NEEDS_COMMENT, DIAG_POP_NEEDS_COMMENT,
DIAG_IGNORE_NEEDS_COMMENT, and DIAG_IGNORE_Os_NEEDS_COMMENT here.
* include/libc-internal.h: Definitions of above macros moved from
here. Include libc-diag.h. Add copyright notice.
* malloc/tst-malloc.c, malloc/tst-memcheck.c, malloc/tst-realloc.c
* misc/tst-error1.c, posix/tst-dir.c, stdio-common/bug21.c
* stdio-common/scanf14.c, stdio-common/scanf4.c, stdio-common/scanf7.c
* stdio-common/test-vfprintf.c, stdio-common/tst-printf.c
* stdio-common/tst-printfsz.c, stdio-common/tst-sprintf.c
* stdio-common/tst-unlockedio.c, stdio-common/tstdiomisc.c
* stdlib/bug-getcontext.c, string/tester.c, string/tst-endian.c
* time/tst-strptime2.c, wcsmbs/tst-wcstof.c:
Include libc-diag.h instead of libc-internal.h.
* stdlib/tst-environ.c: Include libc-diag.h. Suppress -Wnonnull for
call to unsetenv (NULL).
* nptl/tst-mutex1.c: Include libc-diag.h. Suppress -Wnonnull for
call to pthread_mutexattr_destroy (NULL).
2016-11-21 09:46:30 +08:00
|
|
|
#include <libc-diag.h>
|
1997-04-19 19:22:31 +08:00
|
|
|
|
|
|
|
#define V 12345678.12345678
|
|
|
|
|
|
|
|
|
2015-08-04 00:14:21 +08:00
|
|
|
static int
|
|
|
|
do_test (void)
|
1997-04-19 19:22:31 +08:00
|
|
|
{
|
|
|
|
char buf[1024];
|
|
|
|
int result = 0;
|
|
|
|
|
2014-12-10 08:44:54 +08:00
|
|
|
/* Testing printf_size_info requires using the deprecated
|
|
|
|
register_printf_function, resulting in warnings
|
|
|
|
"'register_printf_function' is deprecated". */
|
|
|
|
DIAG_PUSH_NEEDS_COMMENT;
|
|
|
|
DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wdeprecated-declarations");
|
1997-04-19 19:22:31 +08:00
|
|
|
/* Register the printf handlers. */
|
|
|
|
register_printf_function ('b', printf_size, printf_size_info);
|
|
|
|
register_printf_function ('B', printf_size, printf_size_info);
|
2014-12-10 08:44:54 +08:00
|
|
|
DIAG_POP_NEEDS_COMMENT;
|
1997-04-19 19:22:31 +08:00
|
|
|
|
2014-12-12 05:46:21 +08:00
|
|
|
/* All of the formats here use the nonstandard extension specifier
|
|
|
|
just registered, so compiler checking will never grok them. */
|
|
|
|
DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wformat");
|
|
|
|
DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wformat-extra-args");
|
1997-04-19 19:22:31 +08:00
|
|
|
|
|
|
|
sprintf (buf, "%g %b %B %.0b %.0B %.1b %.1B %8.0b %08.0B",
|
|
|
|
V, 1025., V, V, V, V, V, V, V, V);
|
|
|
|
fputs (buf, stdout);
|
|
|
|
if (strcmp (buf, "\
|
|
|
|
1.23457e+07 1.001k 12.346M 12m 12M 11.8m 12.3M 12m 0000012M"))
|
|
|
|
{
|
|
|
|
result = 1;
|
|
|
|
fputs (" -> WRONG\n", stdout);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
fputs (" -> OK\n", stdout);
|
|
|
|
|
|
|
|
sprintf (buf, "%b|%B|%-20.2b|%-10.0b|%-10.8b|%-10.2B|",
|
|
|
|
V, V, V, V, V, V, V, V, V, V, V);
|
|
|
|
fputs (buf, stdout);
|
|
|
|
if (strcmp (buf, "\
|
|
|
|
11.774m|12.346M|11.77m |12m |11.77375614m|12.35M |"))
|
|
|
|
{
|
|
|
|
result = 1;
|
|
|
|
fputs (" -> WRONG\n", stdout);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
fputs (" -> OK\n", stdout);
|
|
|
|
|
|
|
|
sprintf (buf, "%#.0B %*.0b %10.*b %*.*B %10.2B",
|
|
|
|
V, 2, V, 2, V, 10, 2, V, V);
|
|
|
|
fputs (buf, stdout);
|
|
|
|
if (strcmp (buf, "12.M 12m 11.77m 12.35M 12.35M"))
|
|
|
|
{
|
|
|
|
result = 1;
|
|
|
|
fputs (" -> WRONG\n", stdout);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
fputs (" -> OK\n", stdout);
|
|
|
|
|
|
|
|
sprintf (buf, "%6B %6.1B %b %B %b %B",
|
|
|
|
V, V, 1000.0, 1000.0, 1024.0, 1024.0);
|
|
|
|
fputs (buf, stdout);
|
|
|
|
if (strcmp (buf, "12.346M 12.3M 1000.000 1.000K 1.000k 1.024K"))
|
|
|
|
{
|
|
|
|
result = 1;
|
|
|
|
fputs (" -> WRONG\n", stdout);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
fputs (" -> OK\n", stdout);
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
2015-08-04 00:14:21 +08:00
|
|
|
|
|
|
|
#define TEST_FUNCTION do_test ()
|
|
|
|
#include "../test-skeleton.c"
|