]>
Commit | Line | Data |
---|---|---|
28f540f4 RM |
1 | #include <stdio.h> |
2 | #include <dirent.h> | |
3 | #include <stdlib.h> | |
4 | ||
5 | int | |
cccda09f | 6 | main (int argc, char *argv[]) |
28f540f4 | 7 | { |
28f540f4 | 8 | DIR * dirp; |
ba1ffaa1 | 9 | long int save3 = 0; |
d1a5466d | 10 | long int cur; |
28f540f4 | 11 | int i = 0; |
d1a5466d | 12 | int result = 0; |
28f540f4 | 13 | struct dirent *dp; |
125a8cf7 UD |
14 | long int save0; |
15 | long int rewind; | |
28f540f4 | 16 | |
d1a5466d | 17 | dirp = opendir ("."); |
125a8cf7 UD |
18 | if (dirp == NULL) |
19 | { | |
20 | printf ("opendir failed: %m\n"); | |
21 | return 1; | |
22 | } | |
23 | ||
24 | save0 = telldir (dirp); | |
25 | if (save0 == -1) | |
26 | { | |
27 | printf ("telldir failed: %m\n"); | |
28 | result = 1; | |
29 | } | |
30 | ||
d1a5466d | 31 | for (dp = readdir (dirp); dp != NULL; dp = readdir (dirp)) |
28f540f4 | 32 | { |
b20e47cb | 33 | /* save position 3 (after fourth entry) */ |
28f540f4 | 34 | if (i++ == 3) |
d1a5466d | 35 | save3 = telldir (dirp); |
28f540f4 | 36 | |
d1a5466d | 37 | printf ("%s\n", dp->d_name); |
28f540f4 RM |
38 | |
39 | /* stop at 400 (just to make sure dirp->__offset and dirp->__size are | |
40 | scrambled */ | |
41 | if (i == 400) | |
42 | break; | |
43 | } | |
44 | ||
d1a5466d | 45 | printf ("going back past 4-th entry...\n"); |
b20e47cb | 46 | |
28f540f4 RM |
47 | /* go back to saved entry */ |
48 | seekdir (dirp, save3); | |
49 | ||
d1a5466d UD |
50 | /* Check whether telldir equals to save3 now. */ |
51 | cur = telldir (dirp); | |
52 | if (cur != save3) | |
53 | { | |
54 | printf ("seekdir (d, %ld); telldir (d) == %ld\n", save3, cur); | |
55 | result = 1; | |
56 | } | |
cccda09f | 57 | |
28f540f4 | 58 | /* print remaining files (3-last) */ |
d1a5466d UD |
59 | for (dp = readdir (dirp); dp != NULL; dp = readdir (dirp)) |
60 | printf ("%s\n", dp->d_name); | |
28f540f4 | 61 | |
125a8cf7 UD |
62 | /* Check rewinddir */ |
63 | rewinddir (dirp); | |
64 | rewind = telldir (dirp); | |
65 | if (rewind == -1) | |
66 | { | |
67 | printf ("telldir failed: %m\n"); | |
68 | result = 1; | |
69 | } | |
70 | else if (save0 != rewind) | |
71 | { | |
72 | printf ("rewinddir didn't reset directory stream\n"); | |
73 | result = 1; | |
74 | } | |
28f540f4 RM |
75 | |
76 | closedir (dirp); | |
d1a5466d | 77 | return result; |
28f540f4 | 78 | } |