1/* BZ #5424 */
2#include <stdio.h>
3#include <errno.h>
4#include <libc-diag.h>
5
6/* INT_MAX + 1 */
7#define N 2147483648
8
9/* (INT_MAX / 2) + 2 */
10#define N2 1073741825
11
12/* INT_MAX - 3 */
13#define N3 2147483644
14
15#define STRINGIFY(S) #S
16#define MAKE_STR(S) STRINGIFY(S)
17
18#define SN MAKE_STR(N)
19#define SN2 MAKE_STR(N2)
20#define SN3 MAKE_STR(N3)
21
22static int
23do_test (void)
24{
25 int ret;
26
27 FILE *fp = fopen ("/dev/null", "w");
28 if (fp == NULL)
29 {
30 puts (s: "cannot open /dev/null");
31 return 1;
32 }
33
34 /* GCC 9 warns about output of more than INT_MAX characters; this is
35 deliberately tested here. */
36 DIAG_PUSH_NEEDS_COMMENT;
37#if __GNUC_PREREQ (7, 0)
38 DIAG_IGNORE_NEEDS_COMMENT (9, "-Wformat-overflow=");
39#endif
40 ret = fprintf (fp, "%" SN "d", 1);
41 DIAG_POP_NEEDS_COMMENT;
42 printf (format: "ret = %d\n", ret);
43 if (ret != -1 || errno != EOVERFLOW)
44 return 1;
45
46 /* GCC 9 warns about output of more than INT_MAX characters; this is
47 deliberately tested here. */
48 DIAG_PUSH_NEEDS_COMMENT;
49#if __GNUC_PREREQ (7, 0)
50 DIAG_IGNORE_NEEDS_COMMENT (9, "-Wformat-overflow=");
51#endif
52 ret = fprintf (fp, "%." SN "d", 1);
53 DIAG_POP_NEEDS_COMMENT;
54 printf (format: "ret = %d\n", ret);
55 if (ret != -1 || errno != EOVERFLOW)
56 return 1;
57
58 ret = fprintf (fp, "%." SN3 "d", 1);
59 printf (format: "ret = %d\n", ret);
60 if (ret != N3)
61 return 1;
62
63 /* GCC 9 warns about output of more than INT_MAX characters; this is
64 deliberately tested here. */
65 DIAG_PUSH_NEEDS_COMMENT;
66#if __GNUC_PREREQ (7, 0)
67 DIAG_IGNORE_NEEDS_COMMENT (9, "-Wformat-overflow=");
68#endif
69 ret = fprintf (fp, "%" SN2 "d%" SN2 "d", 1, 1);
70 DIAG_POP_NEEDS_COMMENT;
71 printf (format: "ret = %d\n", ret);
72
73 return ret != -1 || errno != EOVERFLOW;
74}
75
76#define TIMEOUT 60
77#define TEST_FUNCTION do_test ()
78#include "../test-skeleton.c"
79

source code of glibc/stdio-common/bug22.c