#include <defs.h> #include <string.h> #include <syscall.h> #include <stat.h> #include <dirent.h> #include <file.h> #include <dir.h> #include <error.h> #include <unistd.h> DIR dir, *dirp=&dir; DIR * opendir(const char *path) { if ((dirp->fd = open(path, O_RDONLY)) < 0) { goto failed; } struct stat __stat, *stat = &__stat; if (fstat(dirp->fd, stat) != 0 || !S_ISDIR(stat->st_mode)) { goto failed; } dirp->dirent.offset = 0; return dirp; failed: return NULL; } struct dirent * readdir(DIR *dirp) { if (sys_getdirentry(dirp->fd, &(dirp->dirent)) == 0) { return &(dirp->dirent); } return NULL; } void closedir(DIR *dirp) { close(dirp->fd); } int getcwd(char *buffer, size_t len) { return sys_getcwd(buffer, len); }