1 #include <stdio.h>
2 #include <sys/types.h>
3 
4 
5 static int
check(FILE * fp,off_t o)6 check (FILE *fp, off_t o)
7 {
8   int result = 0;
9   if (feof (fp))
10     {
11       puts ("feof !");
12       result = 1;
13     }
14   if (ferror (fp))
15     {
16       puts ("ferror !");
17       result = 1;
18     }
19   if (ftello (fp) != o)
20     {
21       printf ("position = %lu, not %lu\n", (unsigned long int) ftello (fp),
22 	      (unsigned long int) o);
23       result = 1;
24     }
25   return result;
26 }
27 
28 
29 static int
do_test(void)30 do_test (void)
31 {
32   FILE *fp = tmpfile ();
33   if (fp == NULL)
34     {
35       puts ("tmpfile failed");
36       return 1;
37     }
38   if (check (fp, 0) != 0)
39     return 1;
40 
41   puts ("going to write");
42   if (fputs ("hello", fp) == EOF)
43     {
44       puts ("fputs failed");
45       return 1;
46     }
47   if (check (fp, 5) != 0)
48     return 1;
49 
50   puts ("going to rewind");
51   rewind (fp);
52   if (check (fp, 0) != 0)
53     return 1;
54 
55   puts ("going to read char");
56   int c = fgetc (fp);
57   if (c != 'h')
58     {
59       printf ("read %c, not %c\n", c, 'h');
60       return 1;
61     }
62   if (check (fp, 1) != 0)
63     return 1;
64 
65   puts ("going to put back");
66   if (ungetc (' ', fp) == EOF)
67     {
68       puts ("ungetc failed");
69       return 1;
70     }
71   if (check (fp, 0) != 0)
72     return 1;
73 
74   puts ("going to write again");
75   if (fputs ("world", fp) == EOF)
76     {
77       puts ("2nd fputs failed");
78       return 1;
79     }
80   if (check (fp, 5) != 0)
81     return 1;
82 
83   puts ("going to rewind again");
84   rewind (fp);
85   if (check (fp, 0) != 0)
86     return 1;
87 
88   if (fclose (fp) != 0)
89     {
90       puts ("fclose failed");
91       return 1;
92     }
93 
94   return 0;
95 }
96 
97 #define TEST_FUNCTION do_test ()
98 #include "../test-skeleton.c"
99