/* If stdio is working correctly, after this is run infile and outfile
   will have the same contents.  If the bug (found in GNU C library 0.3)
   exhibits itself, outfile will be missing the 2nd through 1023rd
   characters.  */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

static char buf[8192];

int
main (void)
{
  FILE *in;
  FILE *out;
  static char inname[] = "/tmp/bug5.in";
  static char outname[] = "/tmp/bug5.out";
  char *printbuf;
  size_t i;
  int result;

  /* Create a test file.  */
  in = fopen (inname, "w+");
  if (in == NULL)
    {
      perror (inname);
      return 1;
    }
  for (i = 0; i < 1000; ++i)
    fprintf (in, "%Zu\n", i);

  out = fopen (outname, "w");
  if (out == NULL)
    {
      perror (outname);
      return 1;
    }
  if (fseek (in, 0L, SEEK_SET) != 0)
    abort ();
  putc (getc (in), out);
  i = fread (buf, 1, sizeof (buf), in);
  if (i == 0)
    {
      perror ("fread");
      return 1;
    }
  if (fwrite (buf, 1, i, out) != i)
    {
      perror ("fwrite");
      return 1;
    }
  fclose (in);
  fclose (out);

  puts ("There should be no further output from this test.");
  fflush (stdout);

  /* We must remove this entry to assure the `cmp' binary does not use
     the perhaps incompatible new shared libraries.  */
  unsetenv ("LD_LIBRARY_PATH");

  asprintf (&printbuf, "cmp %s %s", inname, outname);
  result = system (printbuf);
  remove (inname);
  remove (outname);

  exit ((result != 0));
}
