]>
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 RM |
13 | struct dirent *dp; |
14 | ||
d1a5466d UD |
15 | dirp = opendir ("."); |
16 | for (dp = readdir (dirp); dp != NULL; dp = readdir (dirp)) | |
28f540f4 | 17 | { |
b20e47cb | 18 | /* save position 3 (after fourth entry) */ |
28f540f4 | 19 | if (i++ == 3) |
d1a5466d | 20 | save3 = telldir (dirp); |
28f540f4 | 21 | |
d1a5466d | 22 | printf ("%s\n", dp->d_name); |
28f540f4 RM |
23 | |
24 | /* stop at 400 (just to make sure dirp->__offset and dirp->__size are | |
25 | scrambled */ | |
26 | if (i == 400) | |
27 | break; | |
28 | } | |
29 | ||
d1a5466d | 30 | printf ("going back past 4-th entry...\n"); |
b20e47cb | 31 | |
28f540f4 RM |
32 | /* go back to saved entry */ |
33 | seekdir (dirp, save3); | |
34 | ||
d1a5466d UD |
35 | /* Check whether telldir equals to save3 now. */ |
36 | cur = telldir (dirp); | |
37 | if (cur != save3) | |
38 | { | |
39 | printf ("seekdir (d, %ld); telldir (d) == %ld\n", save3, cur); | |
40 | result = 1; | |
41 | } | |
cccda09f | 42 | |
28f540f4 | 43 | /* print remaining files (3-last) */ |
d1a5466d UD |
44 | for (dp = readdir (dirp); dp != NULL; dp = readdir (dirp)) |
45 | printf ("%s\n", dp->d_name); | |
28f540f4 RM |
46 | |
47 | ||
48 | closedir (dirp); | |
d1a5466d | 49 | return result; |
28f540f4 | 50 | } |