X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/45e1f8b055043e54be35462852ab6649d634da7c..2a49908006b177c4d6354309333d06b1b96e4887:/lunaix-os/usr/libc/src/readdir.c?ds=sidebyside diff --git a/lunaix-os/usr/libc/src/readdir.c b/lunaix-os/usr/libc/src/readdir.c new file mode 100644 index 0000000..d70f225 --- /dev/null +++ b/lunaix-os/usr/libc/src/readdir.c @@ -0,0 +1,57 @@ +#include +#include +#include +#include + +DIR* +opendir(const char* dir) +{ + static DIR _dir; + int fd = open(dir, O_RDONLY); + if (fd < 0) { + return NULL; + } + + _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) +{ + static struct dirent _dirent; + if (!dir) { + return NULL; + } + + 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); + + if (more) { + return &_dirent; + } + + return NULL; +} \ No newline at end of file