diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/dirent/readdir.c | 9 | 
1 files changed, 7 insertions, 2 deletions
| diff --git a/src/dirent/readdir.c b/src/dirent/readdir.c index 98ec029e..2cf0632c 100644 --- a/src/dirent/readdir.c +++ b/src/dirent/readdir.c @@ -1,5 +1,7 @@  #include <dirent.h> +#include <errno.h>  #include "__dirent.h" +#include "syscall.h"  #include "libc.h"  int __getdents(int, struct dirent *, size_t); @@ -9,8 +11,11 @@ struct dirent *readdir(DIR *dir)  	struct dirent *de;  	if (dir->buf_pos >= dir->buf_end) { -		int len = __getdents(dir->fd, (void *)dir->buf, sizeof dir->buf); -		if (len <= 0) return 0; +		int len = __syscall(SYS_getdents, dir->fd, dir->buf, sizeof dir->buf); +		if (len <= 0) { +			if (len < 0 && len != -ENOENT) errno = -len; +			return 0; +		}  		dir->buf_end = len;  		dir->buf_pos = 0;  	} | 
