2009-09-03 02:45:33 +00:00
|
|
|
/* Test program for fsetpos on a wide character stream. */
|
|
|
|
|
|
|
|
#include <assert.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <wchar.h>
|
|
|
|
|
2023-06-01 16:40:05 +00:00
|
|
|
#include <support/xunistd.h>
|
|
|
|
|
2009-09-03 02:45:33 +00:00
|
|
|
static void do_prepare (void);
|
|
|
|
#define PREPARE(argc, argv) do_prepare ()
|
|
|
|
static int do_test (void);
|
|
|
|
#define TEST_FUNCTION do_test ()
|
|
|
|
#include <test-skeleton.c>
|
|
|
|
|
|
|
|
static const char pattern[] = "12345";
|
|
|
|
static char *temp_file;
|
|
|
|
|
|
|
|
static void
|
|
|
|
do_prepare (void)
|
|
|
|
{
|
|
|
|
int fd = create_temp_file ("bug-wsetpos.", &temp_file);
|
|
|
|
if (fd == -1)
|
|
|
|
{
|
|
|
|
printf ("cannot create temporary file: %m\n");
|
|
|
|
exit (1);
|
|
|
|
}
|
2023-06-01 16:40:05 +00:00
|
|
|
xwrite (fd, pattern, sizeof (pattern));
|
2009-09-03 02:45:33 +00:00
|
|
|
close (fd);
|
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
|
|
|
do_test (void)
|
|
|
|
{
|
|
|
|
FILE *fp = fopen (temp_file, "r");
|
|
|
|
fpos_t pos;
|
|
|
|
wchar_t c;
|
|
|
|
|
|
|
|
if (fp == NULL)
|
|
|
|
{
|
2024-05-13 11:50:48 +00:00
|
|
|
printf ("fopen: %m\n");
|
2009-09-03 02:45:33 +00:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
c = fgetwc (fp); assert (c == L'1');
|
|
|
|
c = fgetwc (fp); assert (c == L'2');
|
|
|
|
|
|
|
|
if (fgetpos (fp, &pos) == EOF)
|
|
|
|
{
|
|
|
|
printf ("fgetpos: %m\n");
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
rewind (fp);
|
|
|
|
if (ferror (fp))
|
|
|
|
{
|
|
|
|
printf ("rewind: %m\n");
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
c = fgetwc (fp); assert (c == L'1');
|
|
|
|
|
|
|
|
if (fsetpos (fp, &pos) == EOF)
|
|
|
|
{
|
|
|
|
printf ("fsetpos: %m\n");
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
c = fgetwc (fp);
|
|
|
|
if (c != L'3')
|
|
|
|
{
|
|
|
|
puts ("fsetpos failed");
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
puts ("Test succeeded.");
|
|
|
|
return 0;
|
|
|
|
}
|