Mercurial > hg > Applications > mh
comparison miscellany/libndir/seekdir.c @ 0:bce86c4163a3
Initial revision
author | kono |
---|---|
date | Mon, 18 Apr 2005 23:46:02 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:bce86c4163a3 |
---|---|
1 static char sccsid[] = "@(#)seekdir.c 4.9 3/25/83"; | |
2 | |
3 #include <sys/param.h> | |
4 #include <dir.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 curloc, base, offset; | |
16 struct direct *dp; | |
17 extern long lseek(); | |
18 | |
19 curloc = telldir(dirp); | |
20 if (loc == curloc) | |
21 return; | |
22 base = loc & ~(DIRBLKSIZ - 1); | |
23 offset = loc & (DIRBLKSIZ - 1); | |
24 (void) 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 } |