9p-local.c (84a5a8014801a83d1b8d15fa7f0fde03db081530) 9p-local.c (f314ea4e30a1ef87bf8845da952c6dd0bac20b95)
1/*
2 * 9p Posix callback
3 *
4 * Copyright IBM, Corp. 2010
5 *
6 * Authors:
7 * Anthony Liguori <aliguori@us.ibm.com>
8 *

--- 334 unchanged lines hidden (view full) ---

343
344static int local_close(FsContext *ctx, V9fsFidOpenState *fs)
345{
346 return close(fs->fd);
347}
348
349static int local_closedir(FsContext *ctx, V9fsFidOpenState *fs)
350{
1/*
2 * 9p Posix callback
3 *
4 * Copyright IBM, Corp. 2010
5 *
6 * Authors:
7 * Anthony Liguori <aliguori@us.ibm.com>
8 *

--- 334 unchanged lines hidden (view full) ---

343
344static int local_close(FsContext *ctx, V9fsFidOpenState *fs)
345{
346 return close(fs->fd);
347}
348
349static int local_closedir(FsContext *ctx, V9fsFidOpenState *fs)
350{
351 return closedir(fs->dir);
351 return closedir(fs->dir.stream);
352}
353
354static int local_open(FsContext *ctx, V9fsPath *fs_path,
355 int flags, V9fsFidOpenState *fs)
356{
357 char *buffer;
358 char *path = fs_path->data;
359

--- 5 unchanged lines hidden (view full) ---

365
366static int local_opendir(FsContext *ctx,
367 V9fsPath *fs_path, V9fsFidOpenState *fs)
368{
369 char *buffer;
370 char *path = fs_path->data;
371
372 buffer = rpath(ctx, path);
352}
353
354static int local_open(FsContext *ctx, V9fsPath *fs_path,
355 int flags, V9fsFidOpenState *fs)
356{
357 char *buffer;
358 char *path = fs_path->data;
359

--- 5 unchanged lines hidden (view full) ---

365
366static int local_opendir(FsContext *ctx,
367 V9fsPath *fs_path, V9fsFidOpenState *fs)
368{
369 char *buffer;
370 char *path = fs_path->data;
371
372 buffer = rpath(ctx, path);
373 fs->dir = opendir(buffer);
373 fs->dir.stream = opendir(buffer);
374 g_free(buffer);
374 g_free(buffer);
375 if (!fs->dir) {
375 if (!fs->dir.stream) {
376 return -1;
377 }
378 return 0;
379}
380
381static void local_rewinddir(FsContext *ctx, V9fsFidOpenState *fs)
382{
376 return -1;
377 }
378 return 0;
379}
380
381static void local_rewinddir(FsContext *ctx, V9fsFidOpenState *fs)
382{
383 rewinddir(fs->dir);
383 rewinddir(fs->dir.stream);
384}
385
386static off_t local_telldir(FsContext *ctx, V9fsFidOpenState *fs)
387{
384}
385
386static off_t local_telldir(FsContext *ctx, V9fsFidOpenState *fs)
387{
388 return telldir(fs->dir);
388 return telldir(fs->dir.stream);
389}
390
391static int local_readdir_r(FsContext *ctx, V9fsFidOpenState *fs,
392 struct dirent *entry,
393 struct dirent **result)
394{
395 int ret;
396
397again:
389}
390
391static int local_readdir_r(FsContext *ctx, V9fsFidOpenState *fs,
392 struct dirent *entry,
393 struct dirent **result)
394{
395 int ret;
396
397again:
398 ret = readdir_r(fs->dir, entry, result);
398 ret = readdir_r(fs->dir.stream, entry, result);
399 if (ctx->export_flags & V9FS_SM_MAPPED) {
400 entry->d_type = DT_UNKNOWN;
401 } else if (ctx->export_flags & V9FS_SM_MAPPED_FILE) {
402 if (!ret && *result != NULL &&
403 !strcmp(entry->d_name, VIRTFS_META_DIR)) {
404 /* skp the meta data directory */
405 goto again;
406 }
407 entry->d_type = DT_UNKNOWN;
408 }
409 return ret;
410}
411
412static void local_seekdir(FsContext *ctx, V9fsFidOpenState *fs, off_t off)
413{
399 if (ctx->export_flags & V9FS_SM_MAPPED) {
400 entry->d_type = DT_UNKNOWN;
401 } else if (ctx->export_flags & V9FS_SM_MAPPED_FILE) {
402 if (!ret && *result != NULL &&
403 !strcmp(entry->d_name, VIRTFS_META_DIR)) {
404 /* skp the meta data directory */
405 goto again;
406 }
407 entry->d_type = DT_UNKNOWN;
408 }
409 return ret;
410}
411
412static void local_seekdir(FsContext *ctx, V9fsFidOpenState *fs, off_t off)
413{
414 seekdir(fs->dir, off);
414 seekdir(fs->dir.stream, off);
415}
416
417static ssize_t local_preadv(FsContext *ctx, V9fsFidOpenState *fs,
418 const struct iovec *iov,
419 int iovcnt, off_t offset)
420{
421#ifdef CONFIG_PREADV
422 return preadv(fs->fd, iov, iovcnt, offset);

--- 182 unchanged lines hidden (view full) ---

605}
606
607static int local_fstat(FsContext *fs_ctx, int fid_type,
608 V9fsFidOpenState *fs, struct stat *stbuf)
609{
610 int err, fd;
611
612 if (fid_type == P9_FID_DIR) {
415}
416
417static ssize_t local_preadv(FsContext *ctx, V9fsFidOpenState *fs,
418 const struct iovec *iov,
419 int iovcnt, off_t offset)
420{
421#ifdef CONFIG_PREADV
422 return preadv(fs->fd, iov, iovcnt, offset);

--- 182 unchanged lines hidden (view full) ---

605}
606
607static int local_fstat(FsContext *fs_ctx, int fid_type,
608 V9fsFidOpenState *fs, struct stat *stbuf)
609{
610 int err, fd;
611
612 if (fid_type == P9_FID_DIR) {
613 fd = dirfd(fs->dir);
613 fd = dirfd(fs->dir.stream);
614 } else {
615 fd = fs->fd;
616 }
617
618 err = fstat(fd, stbuf);
619 if (err) {
620 return err;
621 }

--- 371 unchanged lines hidden (view full) ---

993}
994
995static int local_fsync(FsContext *ctx, int fid_type,
996 V9fsFidOpenState *fs, int datasync)
997{
998 int fd;
999
1000 if (fid_type == P9_FID_DIR) {
614 } else {
615 fd = fs->fd;
616 }
617
618 err = fstat(fd, stbuf);
619 if (err) {
620 return err;
621 }

--- 371 unchanged lines hidden (view full) ---

993}
994
995static int local_fsync(FsContext *ctx, int fid_type,
996 V9fsFidOpenState *fs, int datasync)
997{
998 int fd;
999
1000 if (fid_type == P9_FID_DIR) {
1001 fd = dirfd(fs->dir);
1001 fd = dirfd(fs->dir.stream);
1002 } else {
1003 fd = fs->fd;
1004 }
1005
1006 if (datasync) {
1007 return qemu_fdatasync(fd);
1008 } else {
1009 return fsync(fd);

--- 273 unchanged lines hidden ---
1002 } else {
1003 fd = fs->fd;
1004 }
1005
1006 if (datasync) {
1007 return qemu_fdatasync(fd);
1008 } else {
1009 return fsync(fd);

--- 273 unchanged lines hidden ---