zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

msg.h (8872B) - Raw


      1 /*
      2  * Copyright (c) 2000-2007 Apple Inc. All rights reserved.
      3  *
      4  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
      5  *
      6  * This file contains Original Code and/or Modifications of Original Code
      7  * as defined in and that are subject to the Apple Public Source License
      8  * Version 2.0 (the 'License'). You may not use this file except in
      9  * compliance with the License. The rights granted to you under the License
     10  * may not be used to create, or enable the creation or redistribution of,
     11  * unlawful or unlicensed copies of an Apple operating system, or to
     12  * circumvent, violate, or enable the circumvention or violation of, any
     13  * terms of an Apple operating system software license agreement.
     14  *
     15  * Please obtain a copy of the License at
     16  * http://www.opensource.apple.com/apsl/ and read it before using this file.
     17  *
     18  * The Original Code and all software distributed under the License are
     19  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
     20  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
     21  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
     22  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
     23  * Please see the License for the specific language governing rights and
     24  * limitations under the License.
     25  *
     26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
     27  */
     28 /*	$NetBSD: msg.h,v 1.4 1994/06/29 06:44:43 cgd Exp $	*/
     29 
     30 /*
     31  * SVID compatible msg.h file
     32  *
     33  * Author:  Daniel Boulet
     34  *
     35  * Copyright 1993 Daniel Boulet and RTMX Inc.
     36  *
     37  * This system call was implemented by Daniel Boulet under contract from RTMX.
     38  *
     39  * Redistribution and use in source forms, with and without modification,
     40  * are permitted provided that this entire comment appears intact.
     41  *
     42  * Redistribution in binary form may occur without any restrictions.
     43  * Obviously, it would be nice if you gave credit where credit is due
     44  * but requiring it would be too onerous.
     45  *
     46  * This software is provided ``AS IS'' without any warranties of any kind.
     47  */
     48 /*
     49  * NOTICE: This file was modified by SPARTA, Inc. in 2005 to introduce
     50  * support for mandatory and extensible security protections.  This notice
     51  * is included in support of clause 2.2 (b) of the Apple Public License,
     52  * Version 2.0.
     53  */
     54 
     55 #ifndef _SYS_MSG_H_
     56 #define _SYS_MSG_H_
     57 
     58 #include <sys/appleapiopts.h>
     59 
     60 #include <sys/_types.h>
     61 #include <sys/cdefs.h>
     62 
     63 /*
     64  * [XSI] All of the symbols from <sys/ipc.h> SHALL be defined when this
     65  * header is included
     66  */
     67 #include <sys/ipc.h>
     68 
     69 
     70 /*
     71  * [XSI] The pid_t, time_t, key_t, size_t, and ssize_t types shall be
     72  * defined as described in <sys/types.h>.
     73  *
     74  * NOTE:	The definition of the key_t type is implicit from the
     75  *		inclusion of <sys/ipc.h>
     76  */
     77 #include <sys/_types/_pid_t.h>
     78 #include <sys/_types/_time_t.h>
     79 #include <sys/_types/_size_t.h>
     80 #include <sys/_types/_ssize_t.h>
     81 
     82 /* [XSI] Used for the number of messages in the message queue */
     83 typedef unsigned long           msgqnum_t;
     84 
     85 /* [XSI] Used for the number of bytes allowed in a message queue */
     86 typedef unsigned long           msglen_t;
     87 
     88 /*
     89  * Possible values for the fifth parameter to msgrcv(), in addition to the
     90  * IPC_NOWAIT flag, which is permitted.
     91  */
     92 #define MSG_NOERROR     010000          /* [XSI] No error if big message */
     93 
     94 
     95 /*
     96  * Technically, we should force all code references to the new structure
     97  * definition, not in just the standards conformance case, and leave the
     98  * legacy interface there for binary compatibility only.  Currently, we
     99  * are only forcing this for programs requesting standards conformance.
    100  */
    101 #if __DARWIN_UNIX03 || defined(KERNEL)
    102 #pragma pack(4)
    103 /*
    104  * Structure used internally.
    105  *
    106  * Structure whose address is passed as the third parameter to msgctl()
    107  * when the second parameter is IPC_SET or IPC_STAT.  In the case of the
    108  * IPC_SET command, only the msg_perm.{uid|gid|perm} and msg_qbytes are
    109  * honored.  In the case of IPC_STAT, only the fields indicated as [XSI]
    110  * mandated fields are guaranteed to meaningful: DO NOT depend on the
    111  * contents of the other fields.
    112  *
    113  * NOTES:	Reserved fields are not preserved across IPC_SET/IPC_STAT.
    114  */
    115 #if (defined(_POSIX_C_SOURCE) && !defined(_DARWIN_C_SOURCE))
    116 struct msqid_ds
    117 #else
    118 #define msqid_ds        __msqid_ds_new
    119 struct __msqid_ds_new
    120 #endif
    121 {
    122 	struct __ipc_perm_new   msg_perm; /* [XSI] msg queue permissions */
    123 	__int32_t       msg_first;      /* RESERVED: kernel use only */
    124 	__int32_t       msg_last;       /* RESERVED: kernel use only */
    125 	msglen_t        msg_cbytes;     /* # of bytes on the queue */
    126 	msgqnum_t       msg_qnum;       /* [XSI] number of msgs on the queue */
    127 	msglen_t        msg_qbytes;     /* [XSI] max bytes on the queue */
    128 	pid_t           msg_lspid;      /* [XSI] pid of last msgsnd() */
    129 	pid_t           msg_lrpid;      /* [XSI] pid of last msgrcv() */
    130 	time_t          msg_stime;      /* [XSI] time of last msgsnd() */
    131 	__int32_t       msg_pad1;       /* RESERVED: DO NOT USE */
    132 	time_t          msg_rtime;      /* [XSI] time of last msgrcv() */
    133 	__int32_t       msg_pad2;       /* RESERVED: DO NOT USE */
    134 	time_t          msg_ctime;      /* [XSI] time of last msgctl() */
    135 	__int32_t       msg_pad3;       /* RESERVED: DO NOT USE */
    136 	__int32_t       msg_pad4[4];    /* RESERVED: DO NOT USE */
    137 };
    138 #pragma pack()
    139 #else   /* !__DARWIN_UNIX03 */
    140 #define msqid_ds        __msqid_ds_old
    141 #endif  /* !__DARWIN_UNIX03 */
    142 
    143 #if !__DARWIN_UNIX03
    144 struct __msqid_ds_old {
    145 	struct __ipc_perm_old   msg_perm; /* [XSI] msg queue permissions */
    146 	__int32_t       msg_first;      /* RESERVED: kernel use only */
    147 	__int32_t       msg_last;       /* RESERVED: kernel use only */
    148 	msglen_t        msg_cbytes;     /* # of bytes on the queue */
    149 	msgqnum_t       msg_qnum;       /* [XSI] number of msgs on the queue */
    150 	msglen_t        msg_qbytes;     /* [XSI] max bytes on the queue */
    151 	pid_t           msg_lspid;      /* [XSI] pid of last msgsnd() */
    152 	pid_t           msg_lrpid;      /* [XSI] pid of last msgrcv() */
    153 	time_t          msg_stime;      /* [XSI] time of last msgsnd() */
    154 	__int32_t       msg_pad1;       /* RESERVED: DO NOT USE */
    155 	time_t          msg_rtime;      /* [XSI] time of last msgrcv() */
    156 	__int32_t       msg_pad2;       /* RESERVED: DO NOT USE */
    157 	time_t          msg_ctime;      /* [XSI] time of last msgctl() */
    158 	__int32_t       msg_pad3;       /* RESERVED: DO NOT USE */
    159 	__int32_t       msg_pad4[4];    /* RESERVED: DO NOT USE */
    160 };
    161 #endif  /* !__DARWIN_UNIX03 */
    162 
    163 
    164 
    165 #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
    166 #ifdef __APPLE_API_UNSTABLE
    167 /* XXX kernel only; protect with macro later */
    168 
    169 struct msg {
    170 	struct msg      *msg_next;      /* next msg in the chain */
    171 	long            msg_type;       /* type of this message */
    172 	                                /* >0 -> type of this message */
    173 	                                /* 0 -> free header */
    174 	unsigned short  msg_ts;         /* size of this message */
    175 	short           msg_spot;       /* location of msg start in buffer */
    176 	struct label    *label;         /* MAC label */
    177 };
    178 
    179 /*
    180  * Example structure describing a message whose address is to be passed as
    181  * the second argument to the functions msgrcv() and msgsnd().  The only
    182  * actual hard requirement is that the first field be of type long, and
    183  * contain the message type.  The user is encouraged to define their own
    184  * application specific structure; this definition is included solely for
    185  * backward compatability with existing source code.
    186  */
    187 struct mymsg {
    188 	long    mtype;          /* message type (+ve integer) */
    189 	char    mtext[1];       /* message body */
    190 };
    191 
    192 /*
    193  * Based on the configuration parameters described in an SVR2 (yes, two)
    194  * config(1m) man page.
    195  *
    196  * Each message is broken up and stored in segments that are msgssz bytes
    197  * long.  For efficiency reasons, this should be a power of two.  Also,
    198  * it doesn't make sense if it is less than 8 or greater than about 256.
    199  * Consequently, msginit in kern/sysv_msg.c checks that msgssz is a power of
    200  * two between 8 and 1024 inclusive (and panic's if it isn't).
    201  */
    202 struct msginfo {
    203 	int     msgmax,         /* max chars in a message */
    204 	    msgmni,             /* max message queue identifiers */
    205 	    msgmnb,             /* max chars in a queue */
    206 	    msgtql,             /* max messages in system */
    207 	    msgssz,             /* size of a message segment (see notes above) */
    208 	    msgseg;             /* number of message segments */
    209 };
    210 #endif  /* __APPLE_API_UNSTABLE */
    211 #endif  /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
    212 
    213 
    214 __BEGIN_DECLS
    215 #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
    216 int msgsys(int, ...);
    217 #endif  /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
    218 int msgctl(int, int, struct msqid_ds *) __DARWIN_ALIAS(msgctl);
    219 int msgget(key_t, int);
    220 ssize_t msgrcv(int, void *, size_t, long, int) __DARWIN_ALIAS_C(msgrcv);
    221 int msgsnd(int, const void *, size_t, int) __DARWIN_ALIAS_C(msgsnd);
    222 __END_DECLS
    223 
    224 
    225 #endif /* !_SYS_MSG_H_ */