|
|
1.1 root 1: /*
2: telldir -- report directory stream position
3:
4: last edit: 25-Apr-1987 D A Gwyn
5:
6: NOTE: 4.nBSD directory compaction makes seekdir() & telldir()
7: practically impossible to do right. Avoid using them!
8: */
9:
10: #ifdef COHERENT
11: #include <errno.h>
12: #else
13: #include <sys/errno.h>
14: #endif
15:
16: #include <stddef.h>
17:
18: #include <sys/types.h>
19: #include "dirent.h"
20:
21: extern off_t lseek();
22:
23: extern int errno;
24:
25: #ifndef SEEK_CUR
26: #define SEEK_CUR 1
27: #endif
28:
29: off_t
30: telldir( dirp ) /* return offset of next entry */
31: DIR *dirp; /* stream from opendir() */
32: {
33: if ( dirp == NULL || dirp->dd_buf == NULL )
34: {
35: errno = EFAULT;
36: return -1; /* invalid pointer */
37: }
38:
39: if ( dirp->dd_loc < dirp->dd_size ) /* valid index */
40: return ((struct dirent *)&dirp->dd_buf[dirp->dd_loc])->d_off;
41: else /* beginning of next directory block */
42: return lseek( dirp->dd_fd, (off_t)0, SEEK_CUR );
43: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.