[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 15/36] bsd-user: Implement h2t_freebsd11_stat h2t_freebsd_nstat
From: |
Warner Losh |
Subject: |
[PULL 15/36] bsd-user: Implement h2t_freebsd11_stat h2t_freebsd_nstat |
Date: |
Mon, 28 Aug 2023 17:38:00 -0600 |
From: Stacey Son <sson@FreeBSD.org>
Implement the stat conversion functions:
h2t_freebsd11_stat
h2t_freebsd_nstat
Signed-off-by: Stacey Son <sson@FreeBSD.org>
Signed-off-by: Karim Taha <kariem.taha2.7@gmail.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Warner Losh <imp@bsdimp.com>
---
bsd-user/freebsd/os-stat.c | 94 ++++++++++++++++++++++++++++++++++++++
1 file changed, 94 insertions(+)
create mode 100644 bsd-user/freebsd/os-stat.c
diff --git a/bsd-user/freebsd/os-stat.c b/bsd-user/freebsd/os-stat.c
new file mode 100644
index 00000000000..8c73f7402c2
--- /dev/null
+++ b/bsd-user/freebsd/os-stat.c
@@ -0,0 +1,94 @@
+/*
+ * FreeBSD stat related conversion routines
+ *
+ * Copyright (c) 2013 Stacey D. Son
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+#include "qemu/osdep.h"
+
+#include "qemu.h"
+
+/*
+ * stat conversion
+ */
+abi_long h2t_freebsd11_stat(abi_ulong target_addr,
+ struct freebsd11_stat *host_st)
+{
+ struct target_freebsd11_stat *target_st;
+
+ if (!lock_user_struct(VERIFY_WRITE, target_st, target_addr, 0)) {
+ return -TARGET_EFAULT;
+ }
+ memset(target_st, 0, sizeof(*target_st));
+ __put_user(host_st->st_dev, &target_st->st_dev);
+ __put_user(host_st->st_ino, &target_st->st_ino);
+ __put_user(host_st->st_mode, &target_st->st_mode);
+ __put_user(host_st->st_nlink, &target_st->st_nlink);
+ __put_user(host_st->st_uid, &target_st->st_uid);
+ __put_user(host_st->st_gid, &target_st->st_gid);
+ __put_user(host_st->st_rdev, &target_st->st_rdev);
+ __put_user(host_st->st_atim.tv_sec, &target_st->st_atim.tv_sec);
+ __put_user(host_st->st_atim.tv_nsec, &target_st->st_atim.tv_nsec);
+ __put_user(host_st->st_mtim.tv_sec, &target_st->st_mtim.tv_sec);
+ __put_user(host_st->st_mtim.tv_nsec, &target_st->st_mtim.tv_nsec);
+ __put_user(host_st->st_ctim.tv_sec, &target_st->st_ctim.tv_sec);
+ __put_user(host_st->st_ctim.tv_nsec, &target_st->st_ctim.tv_nsec);
+ __put_user(host_st->st_size, &target_st->st_size);
+ __put_user(host_st->st_blocks, &target_st->st_blocks);
+ __put_user(host_st->st_blksize, &target_st->st_blksize);
+ __put_user(host_st->st_flags, &target_st->st_flags);
+ __put_user(host_st->st_gen, &target_st->st_gen);
+ /* st_lspare not used */
+ __put_user(host_st->st_birthtim.tv_sec, &target_st->st_birthtim.tv_sec);
+ __put_user(host_st->st_birthtim.tv_nsec, &target_st->st_birthtim.tv_nsec);
+ unlock_user_struct(target_st, target_addr, 1);
+
+ return 0;
+}
+
+abi_long h2t_freebsd11_nstat(abi_ulong target_addr,
+ struct freebsd11_stat *host_st)
+{
+ struct target_freebsd11_nstat *target_st;
+
+ if (!lock_user_struct(VERIFY_WRITE, target_st, target_addr, 0)) {
+ return -TARGET_EFAULT;
+ }
+ memset(target_st, 0, sizeof(*target_st));
+ __put_user(host_st->st_dev, &target_st->st_dev);
+ __put_user(host_st->st_ino, &target_st->st_ino);
+ __put_user(host_st->st_mode, &target_st->st_mode);
+ __put_user(host_st->st_nlink, &target_st->st_nlink);
+ __put_user(host_st->st_uid, &target_st->st_uid);
+ __put_user(host_st->st_gid, &target_st->st_gid);
+ __put_user(host_st->st_rdev, &target_st->st_rdev);
+ __put_user(host_st->st_atim.tv_sec, &target_st->st_atim.tv_sec);
+ __put_user(host_st->st_atim.tv_nsec, &target_st->st_atim.tv_nsec);
+ __put_user(host_st->st_mtim.tv_sec, &target_st->st_mtim.tv_sec);
+ __put_user(host_st->st_mtim.tv_nsec, &target_st->st_mtim.tv_nsec);
+ __put_user(host_st->st_ctim.tv_sec, &target_st->st_ctim.tv_sec);
+ __put_user(host_st->st_ctim.tv_nsec, &target_st->st_ctim.tv_nsec);
+ __put_user(host_st->st_size, &target_st->st_size);
+ __put_user(host_st->st_blocks, &target_st->st_blocks);
+ __put_user(host_st->st_blksize, &target_st->st_blksize);
+ __put_user(host_st->st_flags, &target_st->st_flags);
+ __put_user(host_st->st_gen, &target_st->st_gen);
+ __put_user(host_st->st_birthtim.tv_sec, &target_st->st_birthtim.tv_sec);
+ __put_user(host_st->st_birthtim.tv_nsec, &target_st->st_birthtim.tv_nsec);
+ unlock_user_struct(target_st, target_addr, 1);
+
+ return 0;
+}
+
--
2.41.0
- [PULL 13/36] bsd-user: Define safe_fcntl macro in bsd-user/syscall_defs.h, (continued)
- [PULL 13/36] bsd-user: Define safe_fcntl macro in bsd-user/syscall_defs.h, Warner Losh, 2023/08/28
- [PULL 16/36] bsd-user: Implement h2t_freebsd_fhandle t2h_freebsd_fhandle, Warner Losh, 2023/08/28
- [PULL 18/36] bsd-user: Implement target_to_host_fcntl_cmd, Warner Losh, 2023/08/28
- [PULL 06/36] bsd-user; Update the definitions of __put_user and __get_user macros, Warner Losh, 2023/08/28
- [PULL 08/36] bsd-user: Add struct target_freebsd11_stat to bsd-user/syscall_defs, Warner Losh, 2023/08/28
- [PULL 09/36] bsd-user: Add struct target_stat to bsd-user/syscall_defs.h, Warner Losh, 2023/08/28
- [PULL 17/36] bsd-user: Implement h2t_freebds11_statfs, Warner Losh, 2023/08/28
- [PULL 20/36] bsd-user: Implement stat related syscalls, Warner Losh, 2023/08/28
- [PULL 22/36] bsd-user: Implement statfs related syscalls, Warner Losh, 2023/08/28
- [PULL 24/36] bsd-user: Implement stat related syscalls, Warner Losh, 2023/08/28
- [PULL 15/36] bsd-user: Implement h2t_freebsd11_stat h2t_freebsd_nstat,
Warner Losh <=
- [PULL 19/36] bsd-uesr: Implement h2t_freebsd_stat and h2t_freebsd_statfs functions, Warner Losh, 2023/08/28
- [PULL 21/36] bsd-user: Implement statfh related syscalls, Warner Losh, 2023/08/28
- [PULL 23/36] bsd-user: Implement getdents related syscalls, Warner Losh, 2023/08/28
- [PULL 25/36] bsd-user: Implement freebsd11 stat related syscalls, Warner Losh, 2023/08/28
- [PULL 28/36] bsd-user: Implement freebsd11 getdirents related syscalls, Warner Losh, 2023/08/28
- [PULL 33/36] bsd-user: Add glue for getfh and related syscalls, Warner Losh, 2023/08/28
- [PULL 32/36] bsd-user: Add glue for the freebsd11_stat syscalls, Warner Losh, 2023/08/28
- [PULL 36/36] bsd-user: Add missing break after do_bsd_preadv, Warner Losh, 2023/08/28
- [PULL 27/36] bsd-user: Implement freebsd11 statfs related syscalls, Warner Losh, 2023/08/28
- [PULL 35/36] bsd-user: Add getdents and fcntl related system calls, Warner Losh, 2023/08/28