/* Test for bug in fflush synchronization behavior. */ #include #include #include static char *fname; static void prepare (void); #define PREPARE(argc, argv) prepare () #define TEST_FUNCTION do_test () static int do_test (void); #include "../test-skeleton.c" static void prepare (void) { int fd = create_temp_file ("bug-mmap-fflush.", &fname); if (fd == -1) exit (3); /* We don't need the descriptor. */ close (fd); } static int do_test (void) { FILE *f; off_t o; char buffer[1024]; snprintf (buffer, sizeof (buffer), "echo 'From foo@bar.com' > %s", fname); system (buffer); f = fopen (fname, "r"); fseek (f, 0, SEEK_END); o = ftello (f); fseek (f, 0, SEEK_SET); fflush (f); snprintf (buffer, sizeof (buffer), "echo 'From bar@baz.edu' >> %s", fname); system (buffer); fseek (f, o, SEEK_SET); if (fgets (buffer, 1024, f) == NULL) exit (1); if (strncmp (buffer, "From ", 5) != 0) exit (1); fclose (f); exit (0); }