On 8/19/23 02:47, Karim Taha wrote:
From: Kyle Evans <kev...@freebsd.org>

Signed-off-by: Kyle Evans <kev...@freebsd.org>
Signed-off-by: Karim Taha <kariem.taha...@gmail.com>
---
  bsd-user/freebsd/os-misc.h    | 52 +++++++++++++++++++++++++++++++++++
  bsd-user/freebsd/os-syscall.c | 13 +++++++++
  2 files changed, 65 insertions(+)

diff --git a/bsd-user/freebsd/os-misc.h b/bsd-user/freebsd/os-misc.h
index 8436ccb2f7..993e4598f9 100644
--- a/bsd-user/freebsd/os-misc.h
+++ b/bsd-user/freebsd/os-misc.h
@@ -24,5 +24,57 @@
  #include <sys/random.h>
  #include <sched.h>
+int shm_open2(const char *path, int flags, mode_t mode, int shmflags,
+    const char *);
+
+#if defined(__FreeBSD_version) && __FreeBSD_version >= 1300048
+/* shm_open2(2) */
+static inline abi_long do_freebsd_shm_open2(abi_ulong pathptr, abi_ulong flags,
+    abi_long mode, abi_ulong shmflags, abi_ulong nameptr)
+{
+    int ret;
+    void *uname, *upath;
+
+#ifdef SHM_ANON

Why would SHM_ANON not be defined? You've already restricted the function to freebsd13+ (presumably so that shm_open2() is in libc.a).


+#define SHM_PATH(p) (p) == SHM_ANON ? (p) : path(p)
+    if (pathptr == (uintptr_t)SHM_ANON) {
+        upath = SHM_ANON;
+    } else
+#else
+#define SHM_PATH(p) path(p)
+#endif
+    {
+        upath = lock_user_string(pathptr);
+        if (upath == NULL) {
+            return -TARGET_EFAULT;
+        }
+    }
+
+    uname = NULL;
+    if (nameptr != 0) {
+        uname = lock_user_string(nameptr);
+        if (uname == NULL) {
+            unlock_user(upath, pathptr, 0);
+            return -TARGET_EFAULT;
+        }
+    }
+    ret = get_errno(shm_open2(SHM_PATH(upath),

There is no need for SHM_PATH because you've already handled the condition while setting upath above.



r~

Reply via email to