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.
This commit is contained in:
parent
543cf8a9e1
commit
0a04075ed9
@ -1,3 +1,10 @@
|
||||
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.
|
||||
|
||||
2001-03-25 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
Add changes which were in this form in the original patch by
|
||||
|
@ -48,7 +48,7 @@ routines := \
|
||||
libc_fatal fmemopen
|
||||
|
||||
tests = tst_swprintf tst_wprintf tst_swscanf tst_wscanf tst_getwc tst_putwc \
|
||||
tst_wprintf2 tst-widetext test-fmemopen
|
||||
tst_wprintf2 tst-widetext test-fmemopen tst-ext
|
||||
test-srcs = test-freopen
|
||||
|
||||
all: # Make this the default target; it will be defined in Rules.
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1993, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1993,96,97,98,99,2000,2001 Free Software Foundation, Inc.
|
||||
This file is part of the GNU IO Library.
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
@ -82,6 +82,8 @@ _IO_setvbuf (fp, buf, mode, size)
|
||||
}
|
||||
break;
|
||||
case _IONBF:
|
||||
fp->_IO_file_flags &= ~_IO_LINE_BUF;
|
||||
fp->_IO_file_flags |= _IO_UNBUFFERED;
|
||||
buf = NULL;
|
||||
size = 0;
|
||||
break;
|
||||
|
141
libio/tst-ext.c
Normal file
141
libio/tst-ext.c
Normal file
@ -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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user