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