[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 07/17] hw/9pfs: Support getting current directory offset for W
From: |
Bin Meng |
Subject: |
[PATCH v3 07/17] hw/9pfs: Support getting current directory offset for Windows |
Date: |
Mon, 19 Dec 2022 18:20:11 +0800 |
From: Guohuai Shi <guohuai.shi@windriver.com>
On Windows 'struct dirent' does not have current directory offset.
Update qemu_dirent_off() to support Windows.
While we are here, add a build time check to error out if a new
host does not implement this helper.
Signed-off-by: Guohuai Shi <guohuai.shi@windriver.com>
Signed-off-by: Bin Meng <bin.meng@windriver.com>
---
(no changes since v1)
hw/9pfs/9p-util.h | 11 ++++++++---
hw/9pfs/9p-util-win32.c | 7 +++++++
hw/9pfs/9p.c | 4 ++--
hw/9pfs/codir.c | 2 +-
4 files changed, 18 insertions(+), 6 deletions(-)
diff --git a/hw/9pfs/9p-util.h b/hw/9pfs/9p-util.h
index 90420a7578..e395936b30 100644
--- a/hw/9pfs/9p-util.h
+++ b/hw/9pfs/9p-util.h
@@ -127,6 +127,7 @@ int unlinkat_win32(int dirfd, const char *pathname, int
flags);
int statfs_win32(const char *root_path, struct statfs *stbuf);
int openat_dir(int dirfd, const char *name);
int openat_file(int dirfd, const char *name, int flags, mode_t mode);
+off_t qemu_dirent_off_win32(void *s, void *fs);
#endif
static inline void close_preserve_errno(int fd)
@@ -200,12 +201,16 @@ ssize_t fremovexattrat_nofollow(int dirfd, const char
*filename,
* so ensure it is manually injected earlier and call here when
* needed.
*/
-static inline off_t qemu_dirent_off(struct dirent *dent)
+static inline off_t qemu_dirent_off(struct dirent *dent, void *s, void *fs)
{
-#ifdef CONFIG_DARWIN
+#if defined(CONFIG_DARWIN)
return dent->d_seekoff;
-#else
+#elif defined(CONFIG_LINUX)
return dent->d_off;
+#elif defined(CONFIG_WIN32)
+ return qemu_dirent_off_win32(s, fs);
+#else
+#error Missing qemu_dirent_off() implementation for this host system
#endif
}
diff --git a/hw/9pfs/9p-util-win32.c b/hw/9pfs/9p-util-win32.c
index 7a270a7bd5..3592e057ce 100644
--- a/hw/9pfs/9p-util-win32.c
+++ b/hw/9pfs/9p-util-win32.c
@@ -929,3 +929,10 @@ int qemu_mknodat(int dirfd, const char *filename, mode_t
mode, dev_t dev)
errno = ENOTSUP;
return -1;
}
+
+off_t qemu_dirent_off_win32(void *s, void *fs)
+{
+ V9fsState *v9fs = s;
+
+ return v9fs->ops->telldir(&v9fs->ctx, (V9fsFidOpenState *)fs);
+}
diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
index 072cf67956..be247eeb30 100644
--- a/hw/9pfs/9p.c
+++ b/hw/9pfs/9p.c
@@ -2336,7 +2336,7 @@ static int coroutine_fn v9fs_do_readdir_with_stat(V9fsPDU
*pdu,
count += len;
v9fs_stat_free(&v9stat);
v9fs_path_free(&path);
- saved_dir_pos = qemu_dirent_off(dent);
+ saved_dir_pos = qemu_dirent_off(dent, pdu->s, &fidp->fs);
}
v9fs_readdir_unlock(&fidp->fs.dir);
@@ -2537,7 +2537,7 @@ static int coroutine_fn v9fs_do_readdir(V9fsPDU *pdu,
V9fsFidState *fidp,
qid.version = 0;
}
- off = qemu_dirent_off(dent);
+ off = qemu_dirent_off(dent, pdu->s, &fidp->fs);
v9fs_string_init(&name);
v9fs_string_sprintf(&name, "%s", dent->d_name);
diff --git a/hw/9pfs/codir.c b/hw/9pfs/codir.c
index 93ba44fb75..d40515a607 100644
--- a/hw/9pfs/codir.c
+++ b/hw/9pfs/codir.c
@@ -168,7 +168,7 @@ static int do_readdir_many(V9fsPDU *pdu, V9fsFidState *fidp,
}
size += len;
- saved_dir_pos = qemu_dirent_off(dent);
+ saved_dir_pos = qemu_dirent_off(dent, s, &fidp->fs);
}
/* restore (last) saved position */
--
2.25.1
- [PATCH v3 00/17] hw/9pfs: Add 9pfs support for Windows, Bin Meng, 2022/12/19
- [PATCH v3 02/17] hw/9pfs: Drop unnecessary *xattr wrapper API declarations, Bin Meng, 2022/12/19
- [PATCH v3 08/17] hw/9pfs: update helper qemu_stat_rdev(), Bin Meng, 2022/12/19
- [PATCH v3 16/17] tests/qtest: virtio-9p-test: Adapt the case for win32, Bin Meng, 2022/12/19
- [PATCH v3 15/17] hw/9pfs: Update synth fs driver for Windows, Bin Meng, 2022/12/19
- [PATCH v3 05/17] hw/9pfs: Implement Windows specific utilities functions for 9pfs, Bin Meng, 2022/12/19
- [PATCH v3 04/17] hw/9pfs: Add missing definitions for Windows, Bin Meng, 2022/12/19
- [PATCH v3 07/17] hw/9pfs: Support getting current directory offset for Windows,
Bin Meng <=
- Re: [PATCH v3 07/17] hw/9pfs: Support getting current directory offset for Windows, Christian Schoenebeck, 2022/12/21
- RE: [PATCH v3 07/17] hw/9pfs: Support getting current directory offset for Windows, Shi, Guohuai, 2022/12/21
- Re: [PATCH v3 07/17] hw/9pfs: Support getting current directory offset for Windows, Christian Schoenebeck, 2022/12/28
- RE: [PATCH v3 07/17] hw/9pfs: Support getting current directory offset for Windows, Shi, Guohuai, 2022/12/29
- Re: [PATCH v3 07/17] hw/9pfs: Support getting current directory offset for Windows, Christian Schoenebeck, 2022/12/30
[PATCH v3 06/17] hw/9pfs: Update the local fs driver to support Windows, Bin Meng, 2022/12/19
[PATCH v3 09/17] hw/9pfs: Add a helper qemu_stat_blksize(), Bin Meng, 2022/12/19
[PATCH v3 17/17] meson.build: Turn on virtfs for Windows, Bin Meng, 2022/12/19
[PATCH v3 01/17] qemu/xattr.h: Exclude <sys/xattr.h> for Windows, Bin Meng, 2022/12/19
[PATCH v3 10/17] hw/9pfs: Disable unsupported flags and features for Windows, Bin Meng, 2022/12/19