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