1234567891011121314151617181920212223242526272829303132333435 |
- #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;
- }
|