Blame libio/tst-ext.c

Packit Service 82fcde
#include <stdio_ext.h>
Packit Service 82fcde
#include <stdlib.h>
Packit Service 82fcde
#include <string.h>
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
int
Packit Service 82fcde
main (void)
Packit Service 82fcde
{
Packit Service 82fcde
  FILE *fp;
Packit Service 82fcde
  const char teststring[] = "hello world";
Packit Service 82fcde
  char buf[3072];
Packit Service 82fcde
  int result = 0;
Packit Service 82fcde
  char readbuf[256];
Packit Service 82fcde
Packit Service 82fcde
  /* Open a file.  */
Packit Service 82fcde
  fp = tmpfile ();
Packit Service 82fcde
Packit Service 82fcde
  /* Set a buffer.  */
Packit Service 82fcde
  if (setvbuf (fp, buf, _IOFBF, sizeof buf) == EOF)
Packit Service 82fcde
    {
Packit Service 82fcde
      printf ("setvbuf failed: %m\n");
Packit Service 82fcde
      exit (1);
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
  /* Get the buffer size.  */
Packit Service 82fcde
  if (__fbufsize (fp) != sizeof buf)
Packit Service 82fcde
    {
Packit Service 82fcde
      printf ("__fbusize() reported a buffer size of %Zd bytes;"
Packit Service 82fcde
	      " we installed a buffer with %Zd bytes\n",
Packit Service 82fcde
	      __fbufsize (fp), sizeof buf);
Packit Service 82fcde
      result = 1;
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
  /* Write something and read it back.  */
Packit Service 82fcde
  if (fputs (teststring, fp) == EOF)
Packit Service 82fcde
    {
Packit Service 82fcde
      printf ("writing to new stream failed: %m\n");
Packit Service 82fcde
      exit (1);
Packit Service 82fcde
    }
Packit Service 82fcde
  rewind (fp);
Packit Service 82fcde
  if (fgets (readbuf, sizeof readbuf, fp) == NULL)
Packit Service 82fcde
    {
Packit Service 82fcde
      printf ("reading from new stream failed: %m\n");
Packit Service 82fcde
      exit (1);
Packit Service 82fcde
    }
Packit Service 82fcde
  if (strcmp (readbuf, teststring) != 0)
Packit Service 82fcde
    {
Packit Service 82fcde
      puts ("not the correct string read");
Packit Service 82fcde
      exit (1);
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
  /* The file must be opened for reading and writing.  */
Packit Service 82fcde
  if (__freading (fp) == 0)
Packit Service 82fcde
    {
Packit Service 82fcde
      puts ("__freading() reported stream is not last read from");
Packit Service 82fcde
      result = 1;
Packit Service 82fcde
    }
Packit Service 82fcde
  if (__fwriting (fp) != 0)
Packit Service 82fcde
    {
Packit Service 82fcde
      puts ("__fwriting() reported stream is write-only or last written to");
Packit Service 82fcde
      result = 1;
Packit Service 82fcde
    }
Packit Service 82fcde
  rewind (fp);
Packit Service 82fcde
  if (fputs (teststring, fp) == EOF)
Packit Service 82fcde
    {
Packit Service 82fcde
      printf ("writing(2) to new stream failed: %m\n");
Packit Service 82fcde
      exit (1);
Packit Service 82fcde
    }
Packit Service 82fcde
  if (__fwriting (fp) == 0)
Packit Service 82fcde
    {
Packit Service 82fcde
      puts ("__fwriting() doe snot reported stream is last written to");
Packit Service 82fcde
      result = 1;
Packit Service 82fcde
    }
Packit Service 82fcde
  if (__freading (fp) != 0)
Packit Service 82fcde
    {
Packit Service 82fcde
      puts ("__freading() reported stream is last read from");
Packit Service 82fcde
      result = 1;
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
  if (__freadable (fp) == 0)
Packit Service 82fcde
    {
Packit Service 82fcde
      puts ("__freading() reported stream is last readable");
Packit Service 82fcde
      result = 1;
Packit Service 82fcde
    }
Packit Service 82fcde
  if (__fwritable (fp) == 0)
Packit Service 82fcde
    {
Packit Service 82fcde
      puts ("__freading() reported stream is last writable");
Packit Service 82fcde
      result = 1;
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
  /* The string we wrote above should still be in the buffer.  */
Packit Service 82fcde
  if (__fpending (fp) != strlen (teststring))
Packit Service 82fcde
    {
Packit Service 82fcde
      printf ("__fpending() returned %Zd; expected %Zd\n",
Packit Service 82fcde
	      __fpending (fp), strlen (teststring));
Packit Service 82fcde
      result = 1;
Packit Service 82fcde
    }
Packit Service 82fcde
  /* Discard all the output.  */
Packit Service 82fcde
  __fpurge (fp);
Packit Service 82fcde
  /* And check again.  */
Packit Service 82fcde
  if (__fpending (fp) != 0)
Packit Service 82fcde
    {
Packit Service 82fcde
      printf ("__fpending() returned %Zd; expected 0\n",
Packit Service 82fcde
	      __fpending (fp));
Packit Service 82fcde
      result = 1;
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
  /* Find out whether buffer is line buffered.  */
Packit Service 82fcde
  if (__flbf (fp) != 0)
Packit Service 82fcde
    {
Packit Service 82fcde
      puts ("__flbf() reports line buffered but it is fully buffered");
Packit Service 82fcde
      result = 1;
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
  if (setvbuf (fp, buf, _IOLBF, sizeof buf) == EOF)
Packit Service 82fcde
    {
Packit Service 82fcde
      printf ("setvbuf(2) failed: %m\n");
Packit Service 82fcde
      exit (1);
Packit Service 82fcde
    }
Packit Service 82fcde
  if (__flbf (fp) == 0)
Packit Service 82fcde
    {
Packit Service 82fcde
      puts ("__flbf() reports file is not line buffered");
Packit Service 82fcde
      result = 1;
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
  if (setvbuf (fp, NULL, _IONBF, 0) == EOF)
Packit Service 82fcde
    {
Packit Service 82fcde
      printf ("setvbuf(3) failed: %m\n");
Packit Service 82fcde
      exit (1);
Packit Service 82fcde
    }
Packit Service 82fcde
  if (__flbf (fp) != 0)
Packit Service 82fcde
    {
Packit Service 82fcde
      puts ("__flbf() reports line buffered but it is not buffered");
Packit Service 82fcde
      result = 1;
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
  fclose (fp);
Packit Service 82fcde
Packit Service 82fcde
  return result;
Packit Service 82fcde
}