[v3,0/7] Fix some libm static issues
[platform/upstream/glibc.git] / libio / bug-mmap-fflush.c
1 /* Test for bug in fflush synchronization behavior.  */
2
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h>
6
7 #include <support/xstdlib.h>
8
9 static char *fname;
10
11 static void prepare (void);
12 #define PREPARE(argc, argv) prepare ()
13
14
15 #define TEST_FUNCTION do_test ()
16 static int do_test (void);
17 #include "../test-skeleton.c"
18
19
20 static void
21 prepare (void)
22 {
23   int fd = create_temp_file ("bug-mmap-fflush.", &fname);
24   if (fd == -1)
25     exit (3);
26   /* We don't need the descriptor.  */
27   close (fd);
28 }
29
30
31 static int
32 do_test (void)
33 {
34   FILE *f;
35   off_t o;
36   char buffer[1024];
37
38   snprintf (buffer, sizeof (buffer), "echo 'From foo@bar.com' > %s", fname);
39   xsystem (buffer);
40
41   f = fopen (fname, "r");
42   fseek (f, 0, SEEK_END);
43   o = ftello (f);
44   fseek (f, 0, SEEK_SET);
45   fflush (f);
46   snprintf (buffer, sizeof (buffer), "echo 'From bar@baz.edu' >> %s", fname);
47   xsystem (buffer);
48
49   fseek (f, o, SEEK_SET);
50   if (fgets (buffer, 1024, f) == NULL)
51     exit (1);
52   if (strncmp (buffer, "From ", 5) != 0)
53     exit (1);
54   fclose (f);
55   exit (0);
56 }