1 /* Test program for synchronization of stdio state with file after fflush. */
7 static void do_prepare (void);
8 #define PREPARE(argc, argv) do_prepare ()
9 static int do_test (void);
10 #define TEST_FUNCTION do_test ()
11 #include <test-skeleton.c>
13 static char *temp_file;
16 static char text1[] = "Line the first\n";
17 static char text2[] = "Line the second\n";
22 temp_fd = create_temp_file ("tst-mmap-eofsync.", &temp_file);
24 error (1, errno, "cannot create temporary file");
27 ssize_t cc = write (temp_fd, text1, sizeof text1 - 1);
28 if (cc != sizeof text1 - 1)
29 error (1, errno, "cannot write to temporary file");
41 f = fopen (temp_file, "rm");
48 if (fgets (buf, sizeof buf, f) == NULL)
54 if (strcmp (buf, text1))
56 printf ("read \"%s\", expected \"%s\"\n", buf, text1);
60 printf ("feof = %d, ferror = %d immediately after fgets\n",
61 feof (f), ferror (f));
65 printf ("fflush failed! %m\n");
69 c = write (temp_fd, text2, sizeof text2 - 1);
70 if (c == sizeof text2 - 1)
71 printf ("wrote more to file\n");
74 printf ("wrote %d != %zd (%m)\n", c, sizeof text2 - 1);
78 if (fgets (buf, sizeof buf, f) == NULL)
80 printf ("second fgets fails: feof = %d, ferror = %d (%m)\n",
81 feof (f), ferror (f));
83 if (fgets (buf, sizeof buf, f) == NULL)
85 printf ("retry fgets fails: feof = %d, ferror = %d (%m)\n",
86 feof (f), ferror (f));
90 if (result == 0 && strcmp (buf, text2))
92 printf ("second time read \"%s\", expected \"%s\"\n", buf, text2);