]> git.ipfire.org Git - thirdparty/glibc.git/blame - dirent/tst-seekdir.c
Consolidate alphasort{64} and versionsort{64} implementation
[thirdparty/glibc.git] / dirent / tst-seekdir.c
CommitLineData
28f540f4
RM
1#include <stdio.h>
2#include <dirent.h>
3#include <stdlib.h>
4
c1f41083
AS
5static int
6do_test (void)
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}
c1f41083
AS
79
80#define TEST_FUNCTION do_test ()
81#include "../test-skeleton.c"