#define SHM_R (IPC_R)
#define SHM_W (IPC_W)
+#pragma pack(4)
+
/*
* Technically, we should force all code references to the new structure
* definition, not in just the standards conformance case, and leave the
* legacy interface there for binary compatibility only. Currently, we
* are only forcing this for programs requesting standards conformance.
*/
-#if defined(__POSIX_C_SOURCE) || defined(kernel) || defined(__LP64__)
+#if __DARWIN_UNIX03 || defined(KERNEL)
/*
* Structure used internally.
*
* the third argment to shmctl().
*
* NOTE: The field shm_internal is not meaningful in user space,
- * and mst not be used there.
+ * and must not be used there.
*/
-struct __shmid_ds_new {
+#if (defined(_POSIX_C_SOURCE) && !defined(_DARWIN_C_SOURCE))
+struct shmid_ds
+#else
+#define shmid_ds __shmid_ds_new
+struct __shmid_ds_new
+#endif
+{
struct __ipc_perm_new shm_perm; /* [XSI] Operation permission value */
size_t shm_segsz; /* [XSI] Size of segment in bytes */
pid_t shm_lpid; /* [XSI] PID of last shared memory op */
pid_t shm_cpid; /* [XSI] PID of creator */
- short shm_nattch; /* [XSI] Number of current attaches */
+ shmatt_t shm_nattch; /* [XSI] Number of current attaches */
time_t shm_atime; /* [XSI] Time of last shmat() */
time_t shm_dtime; /* [XSI] Time of last shmdt() */
time_t shm_ctime; /* [XSI] Time of last shmctl() change */
void *shm_internal; /* reserved for kernel use */
};
-#define shmid_ds __shmid_ds_new
-#else /* !_POSIX_C_SOURCE */
+#else /* !__DARWIN_UNIX03 */
#define shmid_ds __shmid_ds_old
-#endif /* !_POSIX_C_SOURCE */
+#endif /* !__DARWIN_UNIX03 */
-#if !defined(__POSIX_C_SOURCE) && !defined(__LP64__)
+#if !__DARWIN_UNIX03
struct __shmid_ds_old {
struct __ipc_perm_old shm_perm; /* [XSI] Operation permission value */
size_t shm_segsz; /* [XSI] Size of segment in bytes */
pid_t shm_lpid; /* [XSI] PID of last shared memory op */
pid_t shm_cpid; /* [XSI] PID of creator */
- short shm_nattch; /* [XSI] Number of current attaches */
+ shmatt_t shm_nattch; /* [XSI] Number of current attaches */
time_t shm_atime; /* [XSI] Time of last shmat() */
time_t shm_dtime; /* [XSI] Time of last shmdt() */
time_t shm_ctime; /* [XSI] Time of last shmctl() change */
void *shm_internal; /* reserved for kernel use */
};
-#endif /* !_POSIX_C_SOURCE */
+#endif /* !__DARWIN_UNIX03 */
+
+#pragma pack()
#ifndef KERNEL
__BEGIN_DECLS
-#ifndef _POSIX_C_SOURCE
+#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
int shmsys(int, ...);
-#endif /* !_POSIX_C_SOURCE */
+#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
void *shmat (int, const void *, int);
int shmctl(int, int, struct shmid_ds *) __DARWIN_ALIAS(shmctl);
int shmdt(const void *);