| /* Test for bug in fflush synchronization behavior. */ |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| |
| |
| 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); |
| } |