xref: /csrg-svn/lib/libc/gen/readdir.c (revision 5756)
15751Smckusick /* Copyright (c) 1982 Regents of the University of California */
25751Smckusick 
3*5756Smckusic static char sccsid[] = "@(#)readdir.c 1.2 02/11/82";
45751Smckusick 
55751Smckusick #include <sys/types.h>
65751Smckusick #include <ndir.h>
75751Smckusick 
85751Smckusick /*
95751Smckusick  * get next entry in a directory.
105751Smckusick  */
115751Smckusick struct direct *
125751Smckusick readdir(dirp)
135751Smckusick 	register DIR *dirp;
145751Smckusick {
155751Smckusick 	struct direct *dp;
165751Smckusick 
175751Smckusick 	for (;;) {
185751Smckusick 		if (dirp->dd_loc == 0) {
19*5756Smckusic 			dirp->dd_size = read(dirp->dd_fd, dirp->dd_buf,
20*5756Smckusic 			    MAXDIRSIZ);
215751Smckusick 			if (dirp->dd_size <= 0)
225751Smckusick 				return NULL;
235751Smckusick 		}
245751Smckusick 		if (dirp->dd_loc >= dirp->dd_size) {
255751Smckusick 			dirp->dd_loc = 0;
265751Smckusick 			continue;
275751Smckusick 		}
28*5756Smckusic 		dp = (struct direct *)(dirp->dd_buf + dirp->dd_loc);
295751Smckusick 		dirp->dd_loc += sizeof(struct direct);
305751Smckusick 		if (dp->d_ino != 0)
315751Smckusick 			return dp;
325751Smckusick 	}
335751Smckusick }
34