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