projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
changes for whiteouts and union filesystem
[unix-history]
/
usr
/
src
/
lib
/
libc
/
gen
/
readdir.c
diff --git
a/usr/src/lib/libc/gen/readdir.c
b/usr/src/lib/libc/gen/readdir.c
index
a3748b7
..
cab7e54
100644
(file)
--- a/
usr/src/lib/libc/gen/readdir.c
+++ b/
usr/src/lib/libc/gen/readdir.c
@@
-6,7
+6,7
@@
*/
#if defined(LIBC_SCCS) && !defined(lint)
*/
#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)readdir.c 8.
1
(Berkeley) %G%";
+static char sccsid[] = "@(#)readdir.c 8.
2
(Berkeley) %G%";
#endif /* LIBC_SCCS and not lint */
#include <sys/param.h>
#endif /* LIBC_SCCS and not lint */
#include <sys/param.h>
@@
-22,22
+22,23
@@
readdir(dirp)
register struct dirent *dp;
for (;;) {
register struct dirent *dp;
for (;;) {
- if (dirp->dd_loc == 0) {
+ if (dirp->dd_loc >= dirp->dd_size) {
+ if (dirp->dd_flags & __DTF_READALL)
+ return (NULL);
+ dirp->dd_loc = 0;
+ }
+ if (dirp->dd_loc == 0 && !(dirp->dd_flags & __DTF_READALL)) {
dirp->dd_size = getdirentries(dirp->dd_fd,
dirp->dd_buf, dirp->dd_len, &dirp->dd_seek);
if (dirp->dd_size <= 0)
dirp->dd_size = getdirentries(dirp->dd_fd,
dirp->dd_buf, dirp->dd_len, &dirp->dd_seek);
if (dirp->dd_size <= 0)
- return NULL;
- }
- if (dirp->dd_loc >= dirp->dd_size) {
- dirp->dd_loc = 0;
- continue;
+ return (NULL);
}
dp = (struct dirent *)(dirp->dd_buf + dirp->dd_loc);
if ((int)dp & 03) /* bogus pointer check */
}
dp = (struct dirent *)(dirp->dd_buf + dirp->dd_loc);
if ((int)dp & 03) /* bogus pointer check */
- return
NULL
;
+ return
(NULL)
;
if (dp->d_reclen <= 0 ||
dp->d_reclen > dirp->dd_len + 1 - dirp->dd_loc)
if (dp->d_reclen <= 0 ||
dp->d_reclen > dirp->dd_len + 1 - dirp->dd_loc)
- return
NULL
;
+ return
(NULL)
;
dirp->dd_loc += dp->d_reclen;
if (dp->d_ino == 0)
continue;
dirp->dd_loc += dp->d_reclen;
if (dp->d_ino == 0)
continue;