X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/0ca0e2a565657cd3e37315fe665b45b13daaebf4..986ce23ace2f7875a1a561bd947f435a7594146c:/lunaix-os/usr/libc/readdir.c?ds=sidebyside 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