diff options
author | Ulrich Drepper <drepper@redhat.com> | 2001-03-27 00:16:51 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2001-03-27 00:16:51 +0000 |
commit | 0a04075ed9766681c796dfe0f2e2fb81881f09ba (patch) | |
tree | cd119d2b35e7172478d025f98ac1da2718c723ed /libio/tst-ext.c | |
parent | 543cf8a9e162a9a812770c628fa06c7a256752ee (diff) | |
download | glibc-0a04075ed9766681c796dfe0f2e2fb81881f09ba.zip glibc-0a04075ed9766681c796dfe0f2e2fb81881f09ba.tar.gz glibc-0a04075ed9766681c796dfe0f2e2fb81881f09ba.tar.bz2 |
Update.
2001-03-26 Ulrich Drepper <drepper@redhat.com>
* libio/Makefile (tests): Add tst-ext.
* libio/tst-ext.c: New file.
* libio/iosetvbuf.c (_IO_setvbuf): Clear line buffer flag for _IONBF.
Diffstat (limited to 'libio/tst-ext.c')
-rw-r--r-- | libio/tst-ext.c | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/libio/tst-ext.c b/libio/tst-ext.c new file mode 100644 index 0000000..f69fbe6 --- /dev/null +++ b/libio/tst-ext.c @@ -0,0 +1,141 @@ +#include <stdio_ext.h> +#include <stdlib.h> +#include <string.h> + + +int +main (void) +{ + FILE *fp; + const char teststring[] = "hello world"; + char buf[3072]; + int result = 0; + char readbuf[256]; + + /* Open a file. */ + fp = tmpfile (); + + /* Set a buffer. */ + if (setvbuf (fp, buf, _IOFBF, sizeof buf) == EOF) + { + printf ("setvbuf failed: %m\n"); + exit (1); + } + + /* Get the buffer size. */ + if (__fbufsize (fp) != sizeof buf) + { + printf ("__fbusize() reported a buffer size of %Zd bytes;" + " we installed a buffer with %Zd bytes\n", + __fbufsize (fp), sizeof buf); + result = 1; + } + + /* Write something and read it back. */ + if (fputs (teststring, fp) == EOF) + { + printf ("writing to new stream failed: %m\n"); + exit (1); + } + rewind (fp); + if (fgets (readbuf, sizeof readbuf, fp) == NULL) + { + printf ("reading from new stream failed: %m\n"); + exit (1); + } + if (strcmp (readbuf, teststring) != 0) + { + puts ("not the correct string read"); + exit (1); + } + + /* The file must be opened for reading and writing. */ + if (__freading (fp) == 0) + { + puts ("__freading() reported stream is not last read from"); + result = 1; + } + if (__fwriting (fp) != 0) + { + puts ("__fwriting() reported stream is write-only or last written to"); + result = 1; + } + rewind (fp); + if (fputs (teststring, fp) == EOF) + { + printf ("writing(2) to new stream failed: %m\n"); + exit (1); + } + if (__fwriting (fp) == 0) + { + puts ("__fwriting() doe snot reported stream is last written to"); + result = 1; + } + if (__freading (fp) != 0) + { + puts ("__freading() reported stream is last read from"); + result = 1; + } + + if (__freadable (fp) == 0) + { + puts ("__freading() reported stream is last readable"); + result = 1; + } + if (__fwritable (fp) == 0) + { + puts ("__freading() reported stream is last writable"); + result = 1; + } + + /* The string we wrote above should still be in the buffer. */ + if (__fpending (fp) != strlen (teststring)) + { + printf ("__fpending() returned %Zd; expected %Zd\n", + __fpending (fp), strlen (teststring)); + result = 1; + } + /* Discard all the output. */ + __fpurge (fp); + /* And check again. */ + if (__fpending (fp) != 0) + { + printf ("__fpending() returned %Zd; expected 0\n", + __fpending (fp)); + result = 1; + } + + + /* Find out whether buffer is line buffered. */ + if (__flbf (fp) != 0) + { + puts ("__flbf() reports line buffered but it is fully buffered"); + result = 1; + } + + if (setvbuf (fp, buf, _IOLBF, sizeof buf) == EOF) + { + printf ("setvbuf(2) failed: %m\n"); + exit (1); + } + if (__flbf (fp) == 0) + { + puts ("__flbf() reports file is not line buffered"); + result = 1; + } + + if (setvbuf (fp, NULL, _IONBF, 0) == EOF) + { + printf ("setvbuf(3) failed: %m\n"); + exit (1); + } + if (__flbf (fp) != 0) + { + puts ("__flbf() reports line buffered but it is not buffered"); + result = 1; + } + + fclose (fp); + + return result; +} |