int file_getdirentry(int fd, struct dirent *direntp) { int ret; struct file *file; if ((ret = fd2file(fd, &file)) != 0) { return ret; } filemap_acquire(file); struct iobuf __iob, *iob = iobuf_init(&__iob, direntp->d_name, sizeof(direntp->d_name), direntp->d_off); if ((ret = vop_getdirentry(file->node, iob)) == 0) { direntp->d_off += iobuf_used(iob); } filemap_release(file); return ret; }
int file_getdirentry(int fd, struct dirent *direntp) { int ret; struct file *file; if ((ret = fd2file(fd, &file)) != 0) { return ret; } filemap_acquire(file); // kprintf("%s %s %d\n", __FILE__, __func__, __LINE__); struct iobuf __iob, *iob = iobuf_init(&__iob, direntp->name, sizeof(direntp->name), direntp->offset); if ((ret = vop_getdirentry(file->node, iob)) == 0) { direntp->offset += iobuf_used(iob); } filemap_release(file); return ret; }