X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/0cf90cca0c924622f3fee8d2a3fafa8238363dc6..09aa85cf875db1e6fd1317cd2b9947b9d3675d6c:/lunaix-os/usr/libc/readdir.c diff --git a/lunaix-os/usr/libc/readdir.c b/lunaix-os/usr/libc/readdir.c index 9d2b23e..f8285b8 100644 --- a/lunaix-os/usr/libc/readdir.c +++ b/lunaix-os/usr/libc/readdir.c @@ -2,6 +2,7 @@ #include #include #include +#include DIR* opendir(const char* dir) @@ -12,10 +13,28 @@ opendir(const char* dir) return NULL; } - _dir = (DIR){ .dirfd = fd, .prev_res = 0 }; + _dir = (DIR){ .dirfd = fd }; return &_dir; } +int +closedir(DIR* dirp) +{ + if (!dirp || dirp->dirfd == -1) { + // TODO migrate the status.h + return -1; + } + + int err = close(dirp->dirfd); + + if (!err) { + dirp->dirfd = -1; + return 0; + } + + return -1; +} + struct dirent* readdir(DIR* dir) { @@ -24,18 +43,16 @@ readdir(DIR* dir) return NULL; } - struct lx_dirent _lxd; - int more = sys_readdir(dir->dirfd, &_lxd); + struct lx_dirent* _lxd = &dir->_lxd; + + int more = sys_readdir(dir->dirfd, _lxd); - _dirent.d_type = _lxd.d_type; - strncpy(_dirent.d_name, _lxd.d_name, 256); + _dirent.d_type = _lxd->d_type; + strncpy(_dirent.d_name, _lxd->d_name, 256); - if (more || dir->prev_res) { - dir->prev_res = more; + if (more) { return &_dirent; } - if (!dir->prev_res) { - return NULL; - } + return NULL; } \ No newline at end of file