/* Derived from the test case in
   http://sourceware.org/bugzilla/show_bug.cgi?id=1078.  */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define OUT_SIZE 10000


static int fd;

static void prepare (void);
#define PREPARE(argc, argv) prepare ()

static int do_test (void);
#define TEST_FUNCTION do_test ()

#include "../test-skeleton.c"


static void
prepare (void)
{
  fd = create_temp_file ("tst-fwrite.", NULL);
  if (fd == -1)
    {
      puts ("cannot create temporary file");
      exit (1);
    }
}


static int
do_test (void)
{
  FILE* f = fdopen (fd, "w+");
  if (f == NULL) {
    puts ("cannot create stream");
    return 1;
  }
  puts ("Opened temp file");

  if (fwrite ("a", 1, 1, f) != 1)
    {
      puts ("1st fwrite failed");
      return 1;
    }
  puts ("Wrote a byte");
  fflush (f);

  char buffer[10000];
  size_t i = fread (buffer, 1, sizeof (buffer), f);
  printf ("Read %zu bytes\n", i);

  for (i = 0; i < OUT_SIZE; i++)
    {
      if (fwrite ("n", 1, 1, f) != 1)
	{
	  printf ("fwrite in loop round %zu failed\n", i);
	  return 1;
	}

      if ((i + 1) % 1000 == 0)
	printf ("wrote %zu bytes ...\n", i + 1);
    }

  printf ("Wrote %i bytes [done]\n", OUT_SIZE);

  return 0;
}
