]> git.ipfire.org Git - thirdparty/glibc.git/blame - stdio-common/tst-ungetc.c
NEWS: Add advisories.
[thirdparty/glibc.git] / stdio-common / tst-ungetc.c
CommitLineData
1177c8ba
RM
1/* Test for ungetc bugs. */
2
3#include <stdio.h>
5c112f1b 4#include <stdlib.h>
54955962 5#include <unistd.h>
1177c8ba 6
74e8f2dc 7#undef assert
1177c8ba
RM
8#define assert(x) \
9 if (!(x)) \
10 { \
11 fputs ("test failed: " #x "\n", stderr); \
12 retval = 1; \
13 goto the_end; \
14 }
15
16int
17main (int argc, char *argv[])
18{
5c112f1b 19 char name[] = "/tmp/tst-ungetc.XXXXXX";
1177c8ba
RM
20 FILE *fp = NULL;
21 int retval = 0;
22 int c;
b39d5719 23 char buffer[64];
1177c8ba 24
5c112f1b
JM
25 int fd = mkstemp (name);
26 if (fd == -1)
27 {
28 printf ("mkstemp failed: %m\n");
29 return 1;
30 }
31 close (fd);
1177c8ba
RM
32 fp = fopen (name, "w");
33 assert (fp != NULL)
24f25de6 34 fputs ("bla", fp);
1177c8ba
RM
35 fclose (fp);
36 fp = NULL;
37
38 fp = fopen (name, "r");
24f25de6
UD
39 assert (fp != NULL);
40 assert (ungetc ('z', fp) == 'z');
41 assert (getc (fp) == 'z');
42 assert (getc (fp) == 'b');
43 assert (getc (fp) == 'l');
44 assert (ungetc ('m', fp) == 'm');
45 assert (getc (fp) == 'm');
46 assert ((c = getc (fp)) == 'a');
1177c8ba
RM
47 assert (getc (fp) == EOF);
48 assert (ungetc (c, fp) == c);
49 assert (feof (fp) == 0);
24f25de6
UD
50 assert (getc (fp) == c);
51 assert (getc (fp) == EOF);
b39d5719
UD
52 fclose (fp);
53 fp = NULL;
54
55 fp = fopen (name, "r");
56 assert (fp != NULL);
57 assert (getc (fp) == 'b');
58 assert (getc (fp) == 'l');
59 assert (ungetc ('b', fp) == 'b');
60 assert (fread (buffer, 1, 64, fp) == 2);
61 assert (buffer[0] == 'b');
62 assert (buffer[1] == 'a');
1177c8ba
RM
63
64the_end:
65 if (fp != NULL)
66 fclose (fp);
67 unlink (name);
68
69 return retval;
70}