From: Bin Meng <bin.meng@windriver.com>
To: qemu-devel@nongnu.org
Cc: Christian Schoenebeck <qemu_oss@crudebyte.com>,
Greg Kurz <groug@kaod.org>
Subject: [PATCH 03/16] hw/9pfs: Replace the direct call to xxxat() APIs with a wrapper
Date: Mon, 24 Oct 2022 12:57:46 +0800 [thread overview]
Message-ID: <20221024045759.448014-4-bin.meng@windriver.com> (raw)
In-Reply-To: <20221024045759.448014-1-bin.meng@windriver.com>
xxxat() APIs are only available on POSIX platforms. For future
extension to Windows, let's replace the direct call to xxxat()
APIs with a wrapper.
Signed-off-by: Bin Meng <bin.meng@windriver.com>
---
hw/9pfs/9p-util.h | 15 +++++++++++----
hw/9pfs/9p-local.c | 32 ++++++++++++++++----------------
2 files changed, 27 insertions(+), 20 deletions(-)
diff --git a/hw/9pfs/9p-util.h b/hw/9pfs/9p-util.h
index ccfc8b1cb3..c314cf381d 100644
--- a/hw/9pfs/9p-util.h
+++ b/hw/9pfs/9p-util.h
@@ -94,6 +94,13 @@ static inline int errno_to_dotl(int err) {
#define qemu_fgetxattr fgetxattr
#endif
+#define qemu_openat openat
+#define qemu_fstatat fstatat
+#define qemu_mkdirat mkdirat
+#define qemu_renameat renameat
+#define qemu_utimensat utimensat
+#define qemu_unlinkat unlinkat
+
static inline void close_preserve_errno(int fd)
{
int serrno = errno;
@@ -103,8 +110,8 @@ static inline void close_preserve_errno(int fd)
static inline int openat_dir(int dirfd, const char *name)
{
- return openat(dirfd, name,
- O_DIRECTORY | O_RDONLY | O_NOFOLLOW | O_PATH_9P_UTIL);
+ return qemu_openat(dirfd, name,
+ O_DIRECTORY | O_RDONLY | O_NOFOLLOW | O_PATH_9P_UTIL);
}
static inline int openat_file(int dirfd, const char *name, int flags,
@@ -115,8 +122,8 @@ static inline int openat_file(int dirfd, const char *name, int flags,
#ifndef CONFIG_DARWIN
again:
#endif
- fd = openat(dirfd, name, flags | O_NOFOLLOW | O_NOCTTY | O_NONBLOCK,
- mode);
+ fd = qemu_openat(dirfd, name, flags | O_NOFOLLOW | O_NOCTTY | O_NONBLOCK,
+ mode);
if (fd == -1) {
#ifndef CONFIG_DARWIN
if (errno == EPERM && (flags & O_NOATIME)) {
diff --git a/hw/9pfs/9p-local.c b/hw/9pfs/9p-local.c
index d42ce6d8b8..d2246a3d7e 100644
--- a/hw/9pfs/9p-local.c
+++ b/hw/9pfs/9p-local.c
@@ -103,14 +103,14 @@ static void renameat_preserve_errno(int odirfd, const char *opath, int ndirfd,
const char *npath)
{
int serrno = errno;
- renameat(odirfd, opath, ndirfd, npath);
+ qemu_renameat(odirfd, opath, ndirfd, npath);
errno = serrno;
}
static void unlinkat_preserve_errno(int dirfd, const char *path, int flags)
{
int serrno = errno;
- unlinkat(dirfd, path, flags);
+ qemu_unlinkat(dirfd, path, flags);
errno = serrno;
}
@@ -194,7 +194,7 @@ static int local_lstat(FsContext *fs_ctx, V9fsPath *fs_path, struct stat *stbuf)
goto out;
}
- err = fstatat(dirfd, name, stbuf, AT_SYMLINK_NOFOLLOW);
+ err = qemu_fstatat(dirfd, name, stbuf, AT_SYMLINK_NOFOLLOW);
if (err) {
goto err_out;
}
@@ -253,7 +253,7 @@ static int local_set_mapped_file_attrat(int dirfd, const char *name,
}
}
} else {
- ret = mkdirat(dirfd, VIRTFS_META_DIR, 0700);
+ ret = qemu_mkdirat(dirfd, VIRTFS_META_DIR, 0700);
if (ret < 0 && errno != EEXIST) {
return -1;
}
@@ -349,7 +349,7 @@ static int fchmodat_nofollow(int dirfd, const char *name, mode_t mode)
*/
/* First, we clear non-racing symlinks out of the way. */
- if (fstatat(dirfd, name, &stbuf, AT_SYMLINK_NOFOLLOW)) {
+ if (qemu_fstatat(dirfd, name, &stbuf, AT_SYMLINK_NOFOLLOW)) {
return -1;
}
if (S_ISLNK(stbuf.st_mode)) {
@@ -734,7 +734,7 @@ static int local_mkdir(FsContext *fs_ctx, V9fsPath *dir_path,
if (fs_ctx->export_flags & V9FS_SM_MAPPED ||
fs_ctx->export_flags & V9FS_SM_MAPPED_FILE) {
- err = mkdirat(dirfd, name, fs_ctx->dmode);
+ err = qemu_mkdirat(dirfd, name, fs_ctx->dmode);
if (err == -1) {
goto out;
}
@@ -750,7 +750,7 @@ static int local_mkdir(FsContext *fs_ctx, V9fsPath *dir_path,
}
} else if (fs_ctx->export_flags & V9FS_SM_PASSTHROUGH ||
fs_ctx->export_flags & V9FS_SM_NONE) {
- err = mkdirat(dirfd, name, credp->fc_mode);
+ err = qemu_mkdirat(dirfd, name, credp->fc_mode);
if (err == -1) {
goto out;
}
@@ -990,7 +990,7 @@ static int local_link(FsContext *ctx, V9fsPath *oldpath,
if (ctx->export_flags & V9FS_SM_MAPPED_FILE) {
int omap_dirfd, nmap_dirfd;
- ret = mkdirat(ndirfd, VIRTFS_META_DIR, 0700);
+ ret = qemu_mkdirat(ndirfd, VIRTFS_META_DIR, 0700);
if (ret < 0 && errno != EEXIST) {
goto err_undo_link;
}
@@ -1085,7 +1085,7 @@ static int local_utimensat(FsContext *s, V9fsPath *fs_path,
goto out;
}
- ret = utimensat(dirfd, name, buf, AT_SYMLINK_NOFOLLOW);
+ ret = qemu_utimensat(dirfd, name, buf, AT_SYMLINK_NOFOLLOW);
close_preserve_errno(dirfd);
out:
g_free(dirpath);
@@ -1116,7 +1116,7 @@ static int local_unlinkat_common(FsContext *ctx, int dirfd, const char *name,
if (fd == -1) {
return -1;
}
- ret = unlinkat(fd, VIRTFS_META_DIR, AT_REMOVEDIR);
+ ret = qemu_unlinkat(fd, VIRTFS_META_DIR, AT_REMOVEDIR);
close_preserve_errno(fd);
if (ret < 0 && errno != ENOENT) {
return -1;
@@ -1124,7 +1124,7 @@ static int local_unlinkat_common(FsContext *ctx, int dirfd, const char *name,
}
map_dirfd = openat_dir(dirfd, VIRTFS_META_DIR);
if (map_dirfd != -1) {
- ret = unlinkat(map_dirfd, name, 0);
+ ret = qemu_unlinkat(map_dirfd, name, 0);
close_preserve_errno(map_dirfd);
if (ret < 0 && errno != ENOENT) {
return -1;
@@ -1134,7 +1134,7 @@ static int local_unlinkat_common(FsContext *ctx, int dirfd, const char *name,
}
}
- return unlinkat(dirfd, name, flags);
+ return qemu_unlinkat(dirfd, name, flags);
}
static int local_remove(FsContext *ctx, const char *path)
@@ -1151,7 +1151,7 @@ static int local_remove(FsContext *ctx, const char *path)
goto out;
}
- if (fstatat(dirfd, name, &stbuf, AT_SYMLINK_NOFOLLOW) < 0) {
+ if (qemu_fstatat(dirfd, name, &stbuf, AT_SYMLINK_NOFOLLOW) < 0) {
goto err_out;
}
@@ -1296,7 +1296,7 @@ static int local_renameat(FsContext *ctx, V9fsPath *olddir,
return -1;
}
- ret = renameat(odirfd, old_name, ndirfd, new_name);
+ ret = qemu_renameat(odirfd, old_name, ndirfd, new_name);
if (ret < 0) {
goto out;
}
@@ -1304,7 +1304,7 @@ static int local_renameat(FsContext *ctx, V9fsPath *olddir,
if (ctx->export_flags & V9FS_SM_MAPPED_FILE) {
int omap_dirfd, nmap_dirfd;
- ret = mkdirat(ndirfd, VIRTFS_META_DIR, 0700);
+ ret = qemu_mkdirat(ndirfd, VIRTFS_META_DIR, 0700);
if (ret < 0 && errno != EEXIST) {
goto err_undo_rename;
}
@@ -1321,7 +1321,7 @@ static int local_renameat(FsContext *ctx, V9fsPath *olddir,
}
/* rename the .virtfs_metadata files */
- ret = renameat(omap_dirfd, old_name, nmap_dirfd, new_name);
+ ret = qemu_renameat(omap_dirfd, old_name, nmap_dirfd, new_name);
close_preserve_errno(nmap_dirfd);
close_preserve_errno(omap_dirfd);
if (ret < 0 && errno != ENOENT) {
--
2.25.1
next prev parent reply other threads:[~2022-10-24 5:40 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-24 4:57 [PATCH 00/16] hw/9pfs: Add 9pfs support for Windows Bin Meng
2022-10-24 4:57 ` [PATCH 01/16] qemu/xattr.h: Exclude <sys/xattr.h> " Bin Meng
2022-10-24 4:57 ` [PATCH 02/16] hw/9pfs: Drop unnecessary *xattr wrapper API declarations Bin Meng
2022-10-24 4:57 ` Bin Meng [this message]
2022-10-24 4:57 ` [PATCH 04/16] hw/9pfs: Introduce an opaque type 9P_FILE_ID Bin Meng
2022-11-01 13:55 ` Christian Schoenebeck
2022-10-24 4:57 ` [PATCH 05/16] hw/9pfs: Update P9_FILE_ID to support Windows Bin Meng
2022-10-24 4:57 ` [PATCH 06/16] hw/9pfs: Add missing definitions for Windows Bin Meng
2022-10-24 4:57 ` [PATCH 07/16] hw/9pfs: Implement Windows specific utilities functions for 9pfs Bin Meng
2022-11-01 14:27 ` Christian Schoenebeck
2022-11-01 15:13 ` Shi, Guohuai
2022-11-01 15:20 ` Shi, Guohuai
2022-11-01 18:22 ` Christian Schoenebeck
2022-11-02 3:07 ` Shi, Guohuai
2022-11-02 11:05 ` Christian Schoenebeck
2022-11-02 11:28 ` Shi, Guohuai
2022-11-02 11:51 ` Christian Schoenebeck
2022-11-02 12:06 ` Christian Schoenebeck
2022-10-24 4:57 ` [PATCH 08/16] hw/9pfs: Handle current directory offset for Windows Bin Meng
2022-11-01 14:41 ` Christian Schoenebeck
2022-10-24 4:57 ` [PATCH 09/16] hw/9pfs: Disable unsupported flags and features " Bin Meng
2022-11-01 15:04 ` Christian Schoenebeck
2022-11-01 15:34 ` Shi, Guohuai
2022-11-01 18:59 ` Christian Schoenebeck
2022-11-02 3:44 ` Shi, Guohuai
2022-11-02 11:34 ` Christian Schoenebeck
2022-11-02 12:19 ` Shi, Guohuai
2022-10-24 4:57 ` [PATCH 10/16] hw/9pfs: Update the local fs driver to support Windows Bin Meng
2022-10-24 4:57 ` [PATCH 11/16] hw/9pfs: Add Linux error number definition Bin Meng
2022-11-01 15:21 ` Christian Schoenebeck
2022-10-24 4:57 ` [PATCH 12/16] hw/9pfs: Translate Windows errno to Linux value Bin Meng
2022-10-24 4:57 ` [PATCH 13/16] fsdev: Disable proxy fs driver on Windows Bin Meng
2022-10-24 4:57 ` [PATCH 14/16] hw/9pfs: Update synth fs driver for Windows Bin Meng
2022-10-24 4:57 ` [PATCH 15/16] tests/qtest: virtio-9p-test: Adapt the case for win32 Bin Meng
2022-10-25 15:55 ` Thomas Huth
2022-11-01 15:32 ` Christian Schoenebeck
2022-10-24 4:57 ` [PATCH 16/16] meson.build: Turn on virtfs for Windows Bin Meng
2022-10-27 16:19 ` [PATCH 00/16] hw/9pfs: Add 9pfs support " Bin Meng
2022-10-27 16:30 ` Christian Schoenebeck
2022-10-28 2:25 ` Bin Meng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221024045759.448014-4-bin.meng@windriver.com \
--to=bin.meng@windriver.com \
--cc=groug@kaod.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu_oss@crudebyte.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).