+/*
+ * get next entry in a directory.
+ */
+struct direct *
+readdir(dirp)
+ register struct dirstuff *dirp;
+{
+ register struct direct *dp;
+ daddr_t lbn, d;
+
+ for(;;) {
+ if (dirp->loc >= dirp->ip->di_size)
+ return NULL;
+ if ((lbn = lblkno(&sblock, dirp->loc)) == 0) {
+ d = bmap(lbn);
+ if(d == 0)
+ return NULL;
+ bread(fsbtodb(&sblock, d), dirp->dbuf,
+ dblksize(&sblock, dirp->ip, lbn));
+ }
+ dp = (struct direct *)
+ (dirp->dbuf + blkoff(&sblock, dirp->loc));
+ dirp->loc += dp->d_reclen;
+ if (dp->d_ino == 0)
+ continue;
+ return (dp);
+ }
+}
+