Mercurial > hg > Applications > mh
diff miscellany/libndir/seekdir.c @ 0:bce86c4163a3
Initial revision
author | kono |
---|---|
date | Mon, 18 Apr 2005 23:46:02 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/miscellany/libndir/seekdir.c Mon Apr 18 23:46:02 2005 +0900 @@ -0,0 +1,31 @@ +static char sccsid[] = "@(#)seekdir.c 4.9 3/25/83"; + +#include <sys/param.h> +#include <dir.h> + +/* + * seek to an entry in a directory. + * Only values returned by "telldir" should be passed to seekdir. + */ +void +seekdir(dirp, loc) + register DIR *dirp; + long loc; +{ + long curloc, base, offset; + struct direct *dp; + extern long lseek(); + + curloc = telldir(dirp); + if (loc == curloc) + return; + base = loc & ~(DIRBLKSIZ - 1); + offset = loc & (DIRBLKSIZ - 1); + (void) lseek(dirp->dd_fd, base, 0); + dirp->dd_loc = 0; + while (dirp->dd_loc < offset) { + dp = readdir(dirp); + if (dp == NULL) + return; + } +}