X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=klibc%2Fklibc%2Freaddir.c;h=acfe588713fd904aeed160b686d3a1d3e1579b84;hb=cc0e9bfc350e6a8b3fff79a9a0f2a97afa9b3825;hp=bb216a19516a83b390ecd85da1bf424c54ee4629;hpb=a41a0e28c2ba0abf99b5e7ea17645ae0e4f05758;p=elogind.git diff --git a/klibc/klibc/readdir.c b/klibc/klibc/readdir.c index bb216a195..acfe58871 100644 --- a/klibc/klibc/readdir.c +++ b/klibc/klibc/readdir.c @@ -1,21 +1,12 @@ /* - * opendir/readdir/closedir + * readdir.c: opendir/readdir/closedir */ #include #include #include -#include -#include - -#define __IO_DIR_DEFINED -struct _IO_dir { - int fd; - size_t bytes_left; - struct dirent *next; - struct dirent buffer[15]; /* 15 times max dirent size =~ 4K */ -}; +#define __KLIBC_DIRENT_INTERNALS #include DIR *opendir(const char *name) @@ -25,9 +16,9 @@ DIR *opendir(const char *name) if ( !dp ) return NULL; - dp->fd = open(name, O_DIRECTORY|O_RDONLY); + dp->__fd = open(name, O_DIRECTORY|O_RDONLY); - if ( dp->fd < 0 ) { + if ( dp->__fd < 0 ) { free(dp); return NULL; } @@ -43,7 +34,7 @@ struct dirent *readdir(DIR *dir) int rv; if ( !dir->bytes_left ) { - rv = getdents(dir->fd, dir->buffer, sizeof(dir->buffer)); + rv = getdents(dir->__fd, dir->buffer, sizeof(dir->buffer)); if ( rv <= 0 ) return NULL; dir->bytes_left = rv; @@ -51,7 +42,7 @@ struct dirent *readdir(DIR *dir) } dent = dir->next; - ((char *)dir->next) += dent->d_reclen; + dir->next = (struct dirent *)((char *)dir->next + dent->d_reclen); dir->bytes_left -= dent->d_reclen; return dent; @@ -60,7 +51,7 @@ struct dirent *readdir(DIR *dir) int closedir(DIR *dir) { int rv; - rv = close(dir->fd); + rv = close(dir->__fd); free(dir); return rv; }