|
|
1.1 root 1: /* Copyright (c) 1982 Regents of the University of California */
2:
3: #include "config.h"
4: #ifdef LOCALDIR
5: #include <sys/types.h>
6: #include "ndir.h"
7:
8: static char sccsid[] = "@(#)seekdir.c 4.3 2/25/82";
9:
10: /*
11: * seek to an entry in a directory.
12: * Only values returned by ``telldir'' should be passed to seekdir.
13: */
14: void
15: seekdir(dirp, loc)
16: register DIR *dirp;
17: long loc;
18: {
19: long curloc, base, offset;
20: struct direct *dp;
21:
22: curloc = telldir(dirp);
23: if (loc == curloc)
24: return;
25: base = loc & ~(DIRBLKSIZ - 1);
26: offset = loc & (DIRBLKSIZ - 1);
27: if (dirp->dd_loc != 0 && (curloc & ~(DIRBLKSIZ - 1)) == base) {
28: dirp->dd_loc = offset;
29: return;
30: }
31: lseek(dirp->dd_fd, base, 0);
32: dirp->dd_loc = 0;
33: while (dirp->dd_loc < offset) {
34: dp = readdir(dirp);
35: if (dp == NULL)
36: return;
37: }
38: }
39: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.