1*5751Smckusick /* Copyright (c) 1982 Regents of the University of California */ 2*5751Smckusick 3*5751Smckusick static char sccsid[] = "@(#)readdir.c 1.1 02/11/82"; 4*5751Smckusick 5*5751Smckusick #include <sys/types.h> 6*5751Smckusick #include <ndir.h> 7*5751Smckusick 8*5751Smckusick /* 9*5751Smckusick * get next entry in a directory. 10*5751Smckusick */ 11*5751Smckusick struct direct * 12*5751Smckusick readdir(dirp) 13*5751Smckusick register DIR *dirp; 14*5751Smckusick { 15*5751Smckusick struct direct *dp; 16*5751Smckusick 17*5751Smckusick for (;;) { 18*5751Smckusick if (dirp->dd_loc == 0) { 19*5751Smckusick dirp->dd_size = read(dirp->dd_fd, dirp->dd_buf, DIRSIZ); 20*5751Smckusick if (dirp->dd_size <= 0) 21*5751Smckusick return NULL; 22*5751Smckusick } 23*5751Smckusick if (dirp->dd_loc >= dirp->dd_size) { 24*5751Smckusick dirp->dd_loc = 0; 25*5751Smckusick continue; 26*5751Smckusick } 27*5751Smckusick dp = (struct direct *)dirp->dd_buf + dirp->dd_loc; 28*5751Smckusick dirp->dd_loc += sizeof(struct direct); 29*5751Smckusick if (dp->d_ino != 0) 30*5751Smckusick return dp; 31*5751Smckusick } 32*5751Smckusick } 33