2002-08-02 01:29:37 +00:00
|
|
|
/* Test for bug in fflush synchronization behavior. */
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
|
2023-06-14 08:52:07 +00:00
|
|
|
#include <support/xstdlib.h>
|
2002-08-27 12:10:11 +00:00
|
|
|
|
|
|
|
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)
|
2002-08-02 01:29:37 +00:00
|
|
|
{
|
|
|
|
FILE *f;
|
|
|
|
off_t o;
|
2002-08-27 12:10:11 +00:00
|
|
|
char buffer[1024];
|
2002-08-02 01:29:37 +00:00
|
|
|
|
2002-08-27 12:10:11 +00:00
|
|
|
snprintf (buffer, sizeof (buffer), "echo 'From foo@bar.com' > %s", fname);
|
2023-06-14 08:52:07 +00:00
|
|
|
xsystem (buffer);
|
|
|
|
|
2002-08-27 12:10:11 +00:00
|
|
|
f = fopen (fname, "r");
|
2002-08-02 01:29:37 +00:00
|
|
|
fseek (f, 0, SEEK_END);
|
|
|
|
o = ftello (f);
|
|
|
|
fseek (f, 0, SEEK_SET);
|
|
|
|
fflush (f);
|
2002-08-27 12:10:11 +00:00
|
|
|
snprintf (buffer, sizeof (buffer), "echo 'From bar@baz.edu' >> %s", fname);
|
2023-06-14 08:52:07 +00:00
|
|
|
xsystem (buffer);
|
|
|
|
|
2002-08-02 01:29:37 +00:00
|
|
|
fseek (f, o, SEEK_SET);
|
|
|
|
if (fgets (buffer, 1024, f) == NULL)
|
2002-08-27 12:10:11 +00:00
|
|
|
exit (1);
|
2002-08-02 01:29:37 +00:00
|
|
|
if (strncmp (buffer, "From ", 5) != 0)
|
2002-08-27 12:10:11 +00:00
|
|
|
exit (1);
|
2002-08-02 01:29:37 +00:00
|
|
|
fclose (f);
|
|
|
|
exit (0);
|
|
|
|
}
|