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