diff options
Diffstat (limited to 'REORG.TODO/stdio-common/tst-ungetc.c')
-rw-r--r-- | REORG.TODO/stdio-common/tst-ungetc.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/REORG.TODO/stdio-common/tst-ungetc.c b/REORG.TODO/stdio-common/tst-ungetc.c new file mode 100644 index 0000000000..44cf6a6bf6 --- /dev/null +++ b/REORG.TODO/stdio-common/tst-ungetc.c @@ -0,0 +1,63 @@ +/* Test for ungetc bugs. */ + +#include <stdio.h> +#include <unistd.h> + +#undef assert +#define assert(x) \ + if (!(x)) \ + { \ + fputs ("test failed: " #x "\n", stderr); \ + retval = 1; \ + goto the_end; \ + } + +int +main (int argc, char *argv[]) +{ + char *name; + FILE *fp = NULL; + int retval = 0; + int c; + char buffer[64]; + + name = tmpnam (NULL); + fp = fopen (name, "w"); + assert (fp != NULL) + fputs ("bla", fp); + fclose (fp); + fp = NULL; + + fp = fopen (name, "r"); + assert (fp != NULL); + assert (ungetc ('z', fp) == 'z'); + assert (getc (fp) == 'z'); + assert (getc (fp) == 'b'); + assert (getc (fp) == 'l'); + assert (ungetc ('m', fp) == 'm'); + assert (getc (fp) == 'm'); + assert ((c = getc (fp)) == 'a'); + assert (getc (fp) == EOF); + assert (ungetc (c, fp) == c); + assert (feof (fp) == 0); + assert (getc (fp) == c); + assert (getc (fp) == EOF); + fclose (fp); + fp = NULL; + + fp = fopen (name, "r"); + assert (fp != NULL); + assert (getc (fp) == 'b'); + assert (getc (fp) == 'l'); + assert (ungetc ('b', fp) == 'b'); + assert (fread (buffer, 1, 64, fp) == 2); + assert (buffer[0] == 'b'); + assert (buffer[1] == 'a'); + +the_end: + if (fp != NULL) + fclose (fp); + unlink (name); + + return retval; +} |