Revision 56d15a53 hw/virtio-9p-local.c
b/hw/virtio-9p-local.c | ||
---|---|---|
168 | 168 |
return seekdir(dir, off); |
169 | 169 |
} |
170 | 170 |
|
171 |
static ssize_t local_readv(FsContext *ctx, int fd, const struct iovec *iov, |
|
172 |
int iovcnt) |
|
171 |
static ssize_t local_preadv(FsContext *ctx, int fd, const struct iovec *iov,
|
|
172 |
int iovcnt, off_t offset)
|
|
173 | 173 |
{ |
174 |
return readv(fd, iov, iovcnt); |
|
175 |
} |
|
176 |
|
|
177 |
static off_t local_lseek(FsContext *ctx, int fd, off_t offset, int whence) |
|
178 |
{ |
|
179 |
return lseek(fd, offset, whence); |
|
174 |
#ifdef CONFIG_PREADV |
|
175 |
return preadv(fd, iov, iovcnt, offset); |
|
176 |
#else |
|
177 |
int err = lseek(fd, offset, SEEK_SET); |
|
178 |
if (err == -1) { |
|
179 |
return err; |
|
180 |
} else { |
|
181 |
return readv(fd, iov, iovcnt); |
|
182 |
} |
|
183 |
#endif |
|
180 | 184 |
} |
181 | 185 |
|
182 |
static ssize_t local_writev(FsContext *ctx, int fd, const struct iovec *iov, |
|
183 |
int iovcnt) |
|
186 |
static ssize_t local_pwritev(FsContext *ctx, int fd, const struct iovec *iov,
|
|
187 |
int iovcnt, off_t offset)
|
|
184 | 188 |
{ |
185 |
return writev(fd, iov, iovcnt); |
|
189 |
#ifdef CONFIG_PREADV |
|
190 |
return pwritev(fd, iov, iovcnt, offset); |
|
191 |
#else |
|
192 |
int err = lseek(fd, offset, SEEK_SET); |
|
193 |
if (err == -1) { |
|
194 |
return err; |
|
195 |
} else { |
|
196 |
return writev(fd, iov, iovcnt); |
|
197 |
} |
|
198 |
#endif |
|
186 | 199 |
} |
187 | 200 |
|
188 | 201 |
static int local_chmod(FsContext *fs_ctx, const char *path, FsCred *credp) |
... | ... | |
523 | 536 |
.telldir = local_telldir, |
524 | 537 |
.readdir = local_readdir, |
525 | 538 |
.seekdir = local_seekdir, |
526 |
.readv = local_readv, |
|
527 |
.lseek = local_lseek, |
|
528 |
.writev = local_writev, |
|
539 |
.preadv = local_preadv, |
|
540 |
.pwritev = local_pwritev, |
|
529 | 541 |
.chmod = local_chmod, |
530 | 542 |
.mknod = local_mknod, |
531 | 543 |
.mkdir = local_mkdir, |
Also available in: Unified diff