blob: 872cddbf1b3e1165696804a83bf7fb9feedf386a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#include <errno.h>
#include <unistd.h>
#include "dirstream.h"
off_t telldir(DIR * dir)
{
off_t offset;
if (!dir) {
__set_errno(EBADF);
return -1;
}
switch (dir->dd_getdents) {
case no_getdents:
/* We are running the old kernel. This is the starting offset
of the next readdir(). */
offset = lseek(dir->dd_fd, 0, SEEK_CUR);
break;
case unknown:
/* readdir () is not called yet. but seekdir () may be called. */
case have_getdents:
/* The next entry. */
offset = dir->dd_nextoff;
break;
default:
__set_errno(EBADF);
offset = -1;
}
return offset;
}
|