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