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;
+	}
+}