+#pragma pack()
+#else /* !__DARWIN_UNIX03 */
+#define msqid_ds __msqid_ds_old
+#endif /* !__DARWIN_UNIX03 */
+
+#if !__DARWIN_UNIX03
+struct __msqid_ds_old {
+ struct __ipc_perm_old msg_perm; /* [XSI] msg queue permissions */
+ __int32_t msg_first; /* RESERVED: kernel use only */
+ __int32_t msg_last; /* RESERVED: kernel use only */
+ msglen_t msg_cbytes; /* # of bytes on the queue */
+ msgqnum_t msg_qnum; /* [XSI] number of msgs on the queue */
+ msglen_t msg_qbytes; /* [XSI] max bytes on the queue */
+ pid_t msg_lspid; /* [XSI] pid of last msgsnd() */
+ pid_t msg_lrpid; /* [XSI] pid of last msgrcv() */
+ time_t msg_stime; /* [XSI] time of last msgsnd() */
+ __int32_t msg_pad1; /* RESERVED: DO NOT USE */
+ time_t msg_rtime; /* [XSI] time of last msgrcv() */
+ __int32_t msg_pad2; /* RESERVED: DO NOT USE */
+ time_t msg_ctime; /* [XSI] time of last msgctl() */
+ __int32_t msg_pad3; /* RESERVED: DO NOT USE */
+ __int32_t msg_pad4[4]; /* RESERVED: DO NOT USE */
+};
+#endif /* !__DARWIN_UNIX03 */
+
+#ifdef KERNEL
+#ifdef __APPLE_API_PRIVATE
+#include <machine/types.h>
+
+#if __DARWIN_ALIGN_NATURAL
+#pragma options align=natural
+#endif
+
+typedef user_ulong_t user_msgqnum_t;
+typedef user64_ulong_t user64_msgqnum_t;
+typedef user32_ulong_t user32_msgqnum_t;
+
+typedef user_ulong_t user_msglen_t;
+typedef user64_ulong_t user64_msglen_t;
+typedef user32_ulong_t user32_msglen_t;
+
+/* kernel version */
+struct user_msqid_ds {
+ struct ipc_perm msg_perm; /* [XSI] msg queue permissions */
+ struct msg *msg_first; /* first message in the queue */
+ struct msg *msg_last; /* last message in the queue */
+ user_msglen_t msg_cbytes; /* # of bytes on the queue */
+ user_msgqnum_t msg_qnum; /* [XSI] number of msgs on the queue */
+ user_msglen_t msg_qbytes; /* [XSI] max bytes on the queue */
+ pid_t msg_lspid; /* [XSI] pid of last msgsnd() */
+ pid_t msg_lrpid; /* [XSI] pid of last msgrcv() */
+ user_time_t msg_stime; /* [XSI] time of last msgsnd() */
+ __int32_t msg_pad1; /* RESERVED: DO NOT USE */
+ user_time_t msg_rtime; /* [XSI] time of last msgrcv() */
+ __int32_t msg_pad2; /* RESERVED: DO NOT USE */
+ user_time_t msg_ctime; /* [XSI] time of last msgctl() */
+ __int32_t msg_pad3; /* RESERVED: DO NOT USE */
+ __int32_t msg_pad4[4];
+};
+
+/*
+ * user64 version - this structure only has to be correct if
+ * compiled LP64, because the 32 bit kernel doesn't need it
+ */
+struct user64_msqid_ds {
+ struct ipc_perm msg_perm; /* [XSI] msg queue permissions */
+ __int32_t msg_first; /* RESERVED: kernel use only */
+ __int32_t msg_last; /* RESERVED: kernel use only */
+ user64_msglen_t msg_cbytes; /* # of bytes on the queue */
+ user64_msgqnum_t msg_qnum; /* [XSI] number of msgs on the queue */
+ user64_msglen_t msg_qbytes; /* [XSI] max bytes on the queue */
+ pid_t msg_lspid; /* [XSI] pid of last msgsnd() */
+ pid_t msg_lrpid; /* [XSI] pid of last msgrcv() */
+ user64_time_t msg_stime; /* [XSI] time of last msgsnd() */
+ __int32_t msg_pad1; /* RESERVED: DO NOT USE */
+ user64_time_t msg_rtime; /* [XSI] time of last msgrcv() */
+ __int32_t msg_pad2; /* RESERVED: DO NOT USE */
+ user64_time_t msg_ctime; /* [XSI] time of last msgctl() */
+ __int32_t msg_pad3; /* RESERVED: DO NOT USE */
+ __int32_t msg_pad4[4];
+} __attribute__((__packed__));
+
+struct user32_msqid_ds
+{
+ struct __ipc_perm_new msg_perm; /* [XSI] msg queue permissions */
+ __int32_t msg_first; /* RESERVED: kernel use only */
+ __int32_t msg_last; /* RESERVED: kernel use only */
+ user32_msglen_t msg_cbytes; /* # of bytes on the queue */
+ user32_msgqnum_t msg_qnum; /* [XSI] number of msgs on the queue */
+ user32_msglen_t msg_qbytes; /* [XSI] max bytes on the queue */
+ pid_t msg_lspid; /* [XSI] pid of last msgsnd() */
+ pid_t msg_lrpid; /* [XSI] pid of last msgrcv() */
+ user32_time_t msg_stime; /* [XSI] time of last msgsnd() */
+ __int32_t msg_pad1; /* RESERVED: DO NOT USE */
+ user32_time_t msg_rtime; /* [XSI] time of last msgrcv() */
+ __int32_t msg_pad2; /* RESERVED: DO NOT USE */
+ user32_time_t msg_ctime; /* [XSI] time of last msgctl() */
+ __int32_t msg_pad3; /* RESERVED: DO NOT USE */
+ __int32_t msg_pad4[4]; /* RESERVED: DO NOT USE */
+};
+
+#if __DARWIN_ALIGN_NATURAL
+#pragma options align=reset
+#endif
+
+struct label;
+
+/*
+ * Kernel wrapper for the user-level structure
+ */
+struct msqid_kernel {
+ struct user_msqid_ds u;
+ struct label *label; /* MAC framework label */
+};
+
+#endif /* __APPLE_API_PRIVATE */
+#endif /* KERNEL */
+
+
+#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
+#ifdef __APPLE_API_UNSTABLE
+/* XXX kernel only; protect with macro later */