Lines Matching refs:dirs
92 struct erofs_dir_stream *dirs; in erofs_opendir() local
95 dirs = calloc(1, sizeof(*dirs)); in erofs_opendir()
96 if (!dirs) in erofs_opendir()
99 err = erofs_ilookup(filename, &dirs->inode); in erofs_opendir()
103 if (S_ISLNK(dirs->inode.i_mode)) { in erofs_opendir()
104 err = erofs_readlink(&dirs->inode); in erofs_opendir()
109 if (!S_ISDIR(dirs->inode.i_mode)) { in erofs_opendir()
113 *dirsp = (struct fs_dir_stream *)dirs; in erofs_opendir()
116 free(dirs); in erofs_opendir()
122 struct erofs_dir_stream *dirs = (struct erofs_dir_stream *)fs_dirs; in erofs_readdir() local
123 struct fs_dirent *dent = &dirs->dirent; in erofs_readdir()
124 erofs_off_t pos = dirs->pos; in erofs_readdir()
130 if (pos >= dirs->inode.i_size) in erofs_readdir()
133 if (!dirs->maxsize) { in erofs_readdir()
134 dirs->maxsize = min_t(unsigned int, EROFS_MAX_BLOCK_SIZE, in erofs_readdir()
135 dirs->inode.i_size - pos); in erofs_readdir()
137 err = erofs_pread(&dirs->inode, dirs->dblk, in erofs_readdir()
138 dirs->maxsize, pos); in erofs_readdir()
142 de = (struct erofs_dirent *)dirs->dblk; in erofs_readdir()
143 dirs->de_end = le16_to_cpu(de->nameoff); in erofs_readdir()
144 if (dirs->de_end < sizeof(struct erofs_dirent) || in erofs_readdir()
145 dirs->de_end >= EROFS_MAX_BLOCK_SIZE) { in erofs_readdir()
147 dirs->de_end, de->nid | 0ULL); in erofs_readdir()
152 de = (struct erofs_dirent *)(dirs->dblk + erofs_blkoff(pos)); in erofs_readdir()
154 de_name = (char *)dirs->dblk + nameoff; in erofs_readdir()
157 if (de + 1 >= (struct erofs_dirent *)(dirs->dblk + dirs->de_end)) in erofs_readdir()
158 de_namelen = strnlen(de_name, dirs->maxsize - nameoff); in erofs_readdir()
163 if (nameoff + de_namelen > dirs->maxsize || in erofs_readdir()
191 if (erofs_blkoff(pos) >= dirs->de_end) { in erofs_readdir()
193 dirs->maxsize = 0; in erofs_readdir()
195 dirs->pos = pos; in erofs_readdir()