DIR *opendir(const char *dirname) { DIR *dirp; char *list; dirp = malloc(sizeof(DIR)); if (!dirp) return NULL; dirp->fd = open(dirname, ACCS_READ); if (dirp->fd < 0) { free(dirp); return NULL; } list = rp_list(fd_rp(dirp->fd)); dirp->entryv = strparse(list, "\t"); if (!dirp->entryv) { free(dirp); return NULL; } dirp->dirpos = 0; return dirp; }
DIR *opendir(const char *dirname) { DIR *dirp; char *list; dirp = malloc(sizeof(DIR)); if (!dirp) return NULL; dirp->fd = open(dirname, STAT_READER); if (dirp->fd < 0) { free(dirp); return NULL; } if (!rp_type(fd_rp(dirp->fd), "dir")) { errno = ENOTDIR; close(dirp->fd); free(dirp); return NULL; } list = rp_list(fd_rp(dirp->fd)); dirp->entryv = strparse(list, "\t"); if (!dirp->entryv) { free(dirp); return NULL; } dirp->dirpos = 0; return dirp; }