From: Warner Losh <imp@bsdimp.com>
To: qemu-devel@nongnu.org
Cc: Reinoud Zandijk <reinoud@netbsd.org>,
Warner Losh <imp@bsdimp.com>, Ryo ONODERA <ryoon@netbsd.org>,
Kyle Evans <kevans@freebsd.org>, Stacey Son <sson@FreeBSD.org>,
Karim Taha <kariem.taha2.7@gmail.com>,
Richard Henderson <richard.henderson@linaro.org>
Subject: [PULL 23/36] bsd-user: Implement getdents related syscalls
Date: Mon, 28 Aug 2023 17:38:08 -0600 [thread overview]
Message-ID: <20230828233821.43074-24-imp@bsdimp.com> (raw)
In-Reply-To: <20230828233821.43074-1-imp@bsdimp.com>
From: Stacey Son <sson@FreeBSD.org>
Implement the following syscalls:
getdents(2)
getdirecentries(2)
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.h | 72 ++++++++++++++++++++++++++++++++++++++
1 file changed, 72 insertions(+)
diff --git a/bsd-user/freebsd/os-stat.h b/bsd-user/freebsd/os-stat.h
index 9492c93c55a..7dc41cd0bfe 100644
--- a/bsd-user/freebsd/os-stat.h
+++ b/bsd-user/freebsd/os-stat.h
@@ -279,4 +279,76 @@ static inline abi_long do_freebsd_getfsstat(abi_ulong target_addr,
return ret;
}
+/* getdents(2) */
+static inline abi_long do_freebsd11_getdents(abi_long arg1,
+ abi_ulong arg2, abi_long nbytes)
+{
+ abi_long ret;
+ struct freebsd11_dirent *dirp;
+
+ dirp = lock_user(VERIFY_WRITE, arg2, nbytes, 0);
+ if (dirp == NULL) {
+ return -TARGET_EFAULT;
+ }
+ ret = get_errno(freebsd11_getdents(arg1, (char *)dirp, nbytes));
+ if (!is_error(ret)) {
+ struct freebsd11_dirent *de;
+ int len = ret;
+ int reclen;
+
+ de = dirp;
+ while (len > 0) {
+ reclen = de->d_reclen;
+ if (reclen > len) {
+ return -TARGET_EFAULT;
+ }
+ de->d_reclen = tswap16(reclen);
+ de->d_fileno = tswap32(de->d_fileno);
+ len -= reclen;
+ }
+ }
+ return ret;
+}
+
+/* getdirecentries(2) */
+static inline abi_long do_freebsd_getdirentries(abi_long arg1,
+ abi_ulong arg2, abi_long nbytes, abi_ulong arg4)
+{
+ abi_long ret;
+ struct dirent *dirp;
+ long basep;
+
+ dirp = lock_user(VERIFY_WRITE, arg2, nbytes, 0);
+ if (dirp == NULL) {
+ return -TARGET_EFAULT;
+ }
+ ret = get_errno(getdirentries(arg1, (char *)dirp, nbytes, &basep));
+ if (!is_error(ret)) {
+ struct dirent *de;
+ int len = ret;
+ int reclen;
+
+ de = dirp;
+ while (len > 0) {
+ reclen = de->d_reclen;
+ if (reclen > len) {
+ return -TARGET_EFAULT;
+ }
+ de->d_fileno = tswap64(de->d_fileno);
+ de->d_off = tswap64(de->d_off);
+ de->d_reclen = tswap16(de->d_reclen);
+ de->d_namlen = tswap16(de->d_namlen);
+ len -= reclen;
+ de = (struct dirent *)((void *)de + reclen);
+ }
+ }
+ unlock_user(dirp, arg2, ret);
+ if (arg4) {
+ if (put_user(basep, arg4, abi_ulong)) {
+ return -TARGET_EFAULT;
+ }
+ }
+ return ret;
+}
+
#endif /* BSD_USER_FREEBSD_OS_STAT_H */
--
2.41.0
next prev parent reply other threads:[~2023-08-28 23:43 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-28 23:37 [PULL 00/36] 2023q3 bsd user patches Warner Losh
2023-08-28 23:37 ` [PULL 01/36] bsd-user: Remove ELF_START_MMAP and image_info.start_mmap Warner Losh
2023-08-28 23:37 ` [PULL 02/36] bsd-user: Remove image_info.mmap Warner Losh
2023-08-28 23:37 ` [PULL 03/36] bsd-user: Remove image_info.start_brk Warner Losh
2023-08-28 23:37 ` [PULL 04/36] bsd-user: Move _WANT_FREEBSD macros to include/qemu/osdep.h Warner Losh
2023-08-28 23:37 ` [PULL 05/36] bsd-user: Disable clang warnings Warner Losh
2023-08-28 23:37 ` [PULL 06/36] bsd-user; Update the definitions of __put_user and __get_user macros Warner Losh
2023-08-28 23:37 ` [PULL 07/36] bsd-user: Declarations of h2t and t2h conversion functions Warner Losh
2023-08-28 23:37 ` [PULL 08/36] bsd-user: Add struct target_freebsd11_stat to bsd-user/syscall_defs Warner Losh
2023-08-28 23:37 ` [PULL 09/36] bsd-user: Add struct target_stat to bsd-user/syscall_defs.h Warner Losh
2023-08-28 23:37 ` [PULL 10/36] bsd-user: Add structs target_freebsd11_{nstat,statfs} Warner Losh
2023-08-28 23:37 ` [PULL 11/36] bsd-user: Add struct target_statfs Warner Losh
2023-08-28 23:37 ` [PULL 12/36] bsd-user: Add struct target_freebsd_fhandle and fcntl flags Warner Losh
2023-08-28 23:37 ` [PULL 13/36] bsd-user: Define safe_fcntl macro in bsd-user/syscall_defs.h Warner Losh
2023-08-28 23:37 ` [PULL 14/36] bsd-user: Rename target_freebsd_time_t to target_time_t Warner Losh
2023-08-28 23:38 ` [PULL 15/36] bsd-user: Implement h2t_freebsd11_stat h2t_freebsd_nstat Warner Losh
2023-08-28 23:38 ` [PULL 16/36] bsd-user: Implement h2t_freebsd_fhandle t2h_freebsd_fhandle Warner Losh
2023-08-28 23:38 ` [PULL 17/36] bsd-user: Implement h2t_freebds11_statfs Warner Losh
2023-08-28 23:38 ` [PULL 18/36] bsd-user: Implement target_to_host_fcntl_cmd Warner Losh
2023-08-28 23:38 ` [PULL 19/36] bsd-uesr: Implement h2t_freebsd_stat and h2t_freebsd_statfs functions Warner Losh
2023-08-28 23:38 ` [PULL 20/36] bsd-user: Implement stat related syscalls Warner Losh
2023-08-28 23:38 ` [PULL 21/36] bsd-user: Implement statfh " Warner Losh
2023-08-28 23:38 ` [PULL 22/36] bsd-user: Implement statfs " Warner Losh
2023-08-28 23:38 ` Warner Losh [this message]
2023-08-28 23:38 ` [PULL 24/36] bsd-user: Implement stat " Warner Losh
2023-08-28 23:38 ` [PULL 25/36] bsd-user: Implement freebsd11 " Warner Losh
2023-08-28 23:38 ` [PULL 26/36] bsd-user: Implement freebsd11 fstat and fhstat " Warner Losh
2023-08-28 23:38 ` [PULL 27/36] bsd-user: Implement freebsd11 statfs " Warner Losh
2023-08-28 23:38 ` [PULL 28/36] bsd-user: Implement freebsd11 getdirents " Warner Losh
2023-08-28 23:38 ` [PULL 29/36] bsd-user: Implement freebsd11 netbsd stat " Warner Losh
2023-08-28 23:38 ` [PULL 30/36] bsd-user: Implement do_freebsd_realpathat syscall Warner Losh
2023-08-28 23:38 ` [PULL 31/36] bsd-user: Add os-stat.c to the build Warner Losh
2023-08-28 23:38 ` [PULL 32/36] bsd-user: Add glue for the freebsd11_stat syscalls Warner Losh
2023-08-28 23:38 ` [PULL 33/36] bsd-user: Add glue for getfh and related syscalls Warner Losh
2023-08-28 23:38 ` [PULL 34/36] bsd-user: Add glue for statfs related system calls Warner Losh
2023-08-28 23:38 ` [PULL 35/36] bsd-user: Add getdents and fcntl " Warner Losh
2023-08-28 23:38 ` [PULL 36/36] bsd-user: Add missing break after do_bsd_preadv Warner Losh
2023-08-29 13:50 ` [PULL 00/36] 2023q3 bsd user patches Stefan Hajnoczi
2023-08-29 15:32 ` Warner Losh
2023-08-29 17:30 ` Peter Maydell
2023-08-29 18:38 ` Warner Losh
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=20230828233821.43074-24-imp@bsdimp.com \
--to=imp@bsdimp.com \
--cc=kariem.taha2.7@gmail.com \
--cc=kevans@freebsd.org \
--cc=qemu-devel@nongnu.org \
--cc=reinoud@netbsd.org \
--cc=richard.henderson@linaro.org \
--cc=ryoon@netbsd.org \
--cc=sson@FreeBSD.org \
/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).