1 /* Check for a sim bug, whereby an invalid seek (to a negative offset)
2 did not return an error. */
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h>
6 #include <errno.h>
7 #include <sys/types.h>
8 #include <sys/stat.h>
9 #include <fcntl.h>
10 #include <unistd.h>
11
12 int
main(void)13 main (void)
14 {
15 FILE *f;
16 const char fname[] = "sk1test.dat";
17 const char tsttxt[]
18 = "A random line of text, used to test correct read, write and seek.\n";
19 char buf[sizeof tsttxt] = "";
20 int fd;
21
22 f = fopen (fname, "wb");
23 if (f == NULL
24 || fwrite (tsttxt, 1, strlen (tsttxt), f) != strlen (tsttxt)
25 || fclose (f) != 0)
26 {
27 printf ("fail\n");
28 exit (1);
29 }
30
31 fd = open (fname, O_RDONLY);
32 if (fd < 0
33 || lseek (fd, -1L, SEEK_CUR) != -1
34 || errno != EINVAL
35 || read (fd, buf, strlen (tsttxt)) != strlen (tsttxt)
36 || strcmp (buf, tsttxt) != 0)
37 {
38 printf ("fail\n");
39 exit (1);
40 }
41
42 printf ("pass\n");
43 exit (0);
44 }
45