X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fdirent%2Freaddir.c;h=569fc70577378836df852b9187a53d1bddbc3cde;hb=c5d118ebbcfe41d928d8ffc913bc532c59237189;hp=2d27d29a4ca51175fcf1437651bcae5f61f2b092;hpb=4750cf4202c29a895639b89099a7bdbe9ae422b6;p=musl diff --git a/src/dirent/readdir.c b/src/dirent/readdir.c index 2d27d29a..569fc705 100644 --- a/src/dirent/readdir.c +++ b/src/dirent/readdir.c @@ -1,22 +1,22 @@ #include -#include -#include #include -#include -#include +#include #include "__dirent.h" #include "syscall.h" -#include "libc.h" -int __getdents(int, struct dirent *, size_t); +typedef char dirstream_buf_alignment_check[1-2*(int)( + offsetof(struct __dirstream, buf) % sizeof(off_t))]; 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; } @@ -26,4 +26,4 @@ struct dirent *readdir(DIR *dir) return de; } -LFS64(readdir); +weak_alias(readdir, readdir64);