mirror of https://gitlab.com/qemu-project/qemu
hw/9pfs: Replace the direct call to xxxat() APIs with a wrapper
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> Message-Id: <20221219102022.2167736-4-bin.meng@windriver.com> Signed-off-by: Christian Schoenebeck <qemu_oss@crudebyte.com>
This commit is contained in:
parent
09f0080ecd
commit
6ca60cd7a3
|
@ -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) {
|
||||
|
|
|
@ -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)) {
|
||||
|
|
Loading…
Reference in New Issue