qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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 24/36] bsd-user: Implement stat related syscalls
Date: Mon, 28 Aug 2023 17:38:09 -0600	[thread overview]
Message-ID: <20230828233821.43074-25-imp@bsdimp.com> (raw)
In-Reply-To: <20230828233821.43074-1-imp@bsdimp.com>

From: Stacey Son <sson@FreeBSD.org>

Implement the following syscalls:
fcntl(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 | 74 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 74 insertions(+)

diff --git a/bsd-user/freebsd/os-stat.h b/bsd-user/freebsd/os-stat.h
index 7dc41cd0bfe..5d9323c7d1b 100644
--- a/bsd-user/freebsd/os-stat.h
+++ b/bsd-user/freebsd/os-stat.h
@@ -351,4 +351,78 @@ static inline abi_long do_freebsd_getdirentries(abi_long arg1,
     return ret;
 }
 
+/* fcntl(2) */
+static inline abi_long do_freebsd_fcntl(abi_long arg1, abi_long arg2,
+        abi_ulong arg3)
+{
+    abi_long ret;
+    int host_cmd;
+    struct flock fl;
+    struct target_freebsd_flock *target_fl;
+
+    host_cmd = target_to_host_fcntl_cmd(arg2);
+    if (host_cmd < 0) {
+        return host_cmd;
+    }
+    switch (arg2) {
+    case TARGET_F_GETLK:
+        if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) {
+            return -TARGET_EFAULT;
+        }
+        __get_user(fl.l_type, &target_fl->l_type);
+        __get_user(fl.l_whence, &target_fl->l_whence);
+        __get_user(fl.l_start, &target_fl->l_start);
+        __get_user(fl.l_len, &target_fl->l_len);
+        __get_user(fl.l_pid, &target_fl->l_pid);
+        __get_user(fl.l_sysid, &target_fl->l_sysid);
+        unlock_user_struct(target_fl, arg3, 0);
+        ret = get_errno(safe_fcntl(arg1, host_cmd, &fl));
+        if (!is_error(ret)) {
+            if (!lock_user_struct(VERIFY_WRITE, target_fl, arg3, 0)) {
+                return -TARGET_EFAULT;
+            }
+            __put_user(fl.l_type, &target_fl->l_type);
+            __put_user(fl.l_whence, &target_fl->l_whence);
+            __put_user(fl.l_start, &target_fl->l_start);
+            __put_user(fl.l_len, &target_fl->l_len);
+            __put_user(fl.l_pid, &target_fl->l_pid);
+            __put_user(fl.l_sysid, &target_fl->l_sysid);
+            unlock_user_struct(target_fl, arg3, 1);
+        }
+        break;
+
+    case TARGET_F_SETLK:
+    case TARGET_F_SETLKW:
+        if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) {
+            return -TARGET_EFAULT;
+        }
+        __get_user(fl.l_type, &target_fl->l_type);
+        __get_user(fl.l_whence, &target_fl->l_whence);
+        __get_user(fl.l_start, &target_fl->l_start);
+        __get_user(fl.l_len, &target_fl->l_len);
+        __get_user(fl.l_pid, &target_fl->l_pid);
+        __get_user(fl.l_sysid, &target_fl->l_sysid);
+        unlock_user_struct(target_fl, arg3, 0);
+        ret = get_errno(safe_fcntl(arg1, host_cmd, &fl));
+        break;
+
+    case TARGET_F_DUPFD:
+    case TARGET_F_DUP2FD:
+    case TARGET_F_GETOWN:
+    case TARGET_F_SETOWN:
+    case TARGET_F_GETFD:
+    case TARGET_F_SETFD:
+    case TARGET_F_GETFL:
+    case TARGET_F_SETFL:
+    case TARGET_F_READAHEAD:
+    case TARGET_F_RDAHEAD:
+    case TARGET_F_ADD_SEALS:
+    case TARGET_F_GET_SEALS:
+    default:
+        ret = get_errno(safe_fcntl(arg1, host_cmd, arg3));
+        break;
+    }
+    return ret;
+}
+
 #endif /* BSD_USER_FREEBSD_OS_STAT_H */
-- 
2.41.0



  parent reply	other threads:[~2023-08-28 23:45 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 ` [PULL 23/36] bsd-user: Implement getdents " Warner Losh
2023-08-28 23:38 ` Warner Losh [this message]
2023-08-28 23:38 ` [PULL 25/36] bsd-user: Implement freebsd11 stat " 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-25-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).