2 readdir -- read next entry from a directory stream
4 last edit: 25-Apr-1987 D A Gwyn
12 /* SVR3 system call, or emulation for getdents() */
13 extern int getdents(int fildes, char *buf, unsigned nbyte);
20 readdir(register DIR *dirp)
22 register struct dirent *dp; /* -> directory data */
24 if ( dirp == NULL || dirp->dd_buf == NULL )
27 return NULL; /* invalid pointer */
31 if ( dirp->dd_loc >= dirp->dd_size ) /* empty or obsolete */
32 dirp->dd_loc = dirp->dd_size = 0;
34 if ( dirp->dd_size == 0 /* need to refill buffer */
36 getdents( dirp->dd_fd, dirp->dd_buf, (unsigned)DIRBUF )
39 return NULL; /* EOF or error */
41 dp = (struct dirent *)&dirp->dd_buf[dirp->dd_loc];
42 dirp->dd_loc += dp->d_reclen;
44 while ( dp->d_ino == 0L ); /* don't rely on getdents() */