/*
- * Copyright (c) 2000-2001 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2000-2008 Apple Inc. All rights reserved.
+ *
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
*
- * @APPLE_LICENSE_HEADER_START@
- *
- * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved.
- *
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
* Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- *
+ * compliance with the License. The rights granted to you under the License
+ * may not be used to create, or enable the creation or redistribution of,
+ * unlawful or unlicensed copies of an Apple operating system, or to
+ * circumvent, violate, or enable the circumvention or violation of, any
+ * terms of an Apple operating system software license agreement.
+ *
+ * Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this file.
+ *
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
- *
- * @APPLE_LICENSE_HEADER_END@
+ *
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
*/
/* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */
-/*-
+/*
* Copyright (c) 1982, 1986, 1991, 1993, 1994
* The Regents of the University of California. All rights reserved.
* (c) UNIX System Laboratories, Inc.
*/
#ifndef _SYS_TYPES_H_
-#define _SYS_TYPES_H_
+#define _SYS_TYPES_H_
#include <sys/appleapiopts.h>
/* Machine type dependent parameters. */
#include <machine/types.h>
+#include <sys/_types.h>
-#include <machine/ansi.h>
#include <machine/endian.h>
-#ifndef _POSIX_SOURCE
-typedef unsigned char u_char;
-typedef unsigned short u_short;
-typedef unsigned int u_int;
-typedef unsigned long u_long;
-typedef unsigned short ushort; /* Sys V compatibility */
-typedef unsigned int uint; /* Sys V compatibility */
+#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
+#include <sys/_types/_u_char.h>
+#include <sys/_types/_u_short.h>
+#include <sys/_types/_u_int.h>
+#ifndef _U_LONG
+typedef unsigned long u_long;
+#define _U_LONG
#endif
-
-typedef u_int64_t u_quad_t; /* quads */
-typedef int64_t quad_t;
-typedef quad_t * qaddr_t;
-
-typedef char * caddr_t; /* core address */
-typedef int32_t daddr_t; /* disk address */
-typedef int32_t dev_t; /* device number */
-typedef u_int32_t fixpt_t; /* fixed point number */
-typedef u_int32_t gid_t; /* group id */
-typedef u_int32_t in_addr_t; /* base type for internet address */
-typedef u_int16_t in_port_t;
-typedef u_int32_t ino_t; /* inode number */
-typedef long key_t; /* IPC key (for Sys V IPC) */
-typedef u_int16_t mode_t; /* permissions */
-typedef u_int16_t nlink_t; /* link count */
-typedef quad_t off_t; /* file offset */
-typedef int32_t pid_t; /* process id */
-typedef quad_t rlim_t; /* resource limit */
-typedef int32_t segsz_t; /* segment size */
-typedef int32_t swblk_t; /* swap offset */
-typedef u_int32_t uid_t; /* user id */
-typedef u_int32_t useconds_t; /* microseconds (unsigned) */
-
-#ifndef _POSIX_SOURCE
-/* Major, minor numbers, dev_t's. */
-#define major(x) ((int32_t)(((u_int32_t)(x) >> 24) & 0xff))
-#define minor(x) ((int32_t)((x) & 0xffffff))
-#define makedev(x,y) ((dev_t)(((x) << 24) | (y)))
+typedef unsigned short ushort; /* Sys V compatibility */
+typedef unsigned int uint; /* Sys V compatibility */
#endif
-#ifndef _BSD_CLOCK_T_DEFINED_
-#define _BSD_CLOCK_T_DEFINED_
-typedef _BSD_CLOCK_T_ clock_t;
-#endif
+typedef u_int64_t u_quad_t; /* quads */
+typedef int64_t quad_t;
+typedef quad_t * qaddr_t;
-#ifndef _BSD_SIZE_T_DEFINED_
-#define _BSD_SIZE_T_DEFINED_
-typedef _BSD_SIZE_T_ size_t;
-#endif
+#include <sys/_types/_caddr_t.h> /* core address */
-#ifndef _BSD_SSIZE_T_DEFINED_
-#define _BSD_SSIZE_T_DEFINED_
-typedef _BSD_SSIZE_T_ ssize_t;
-#endif
+typedef int32_t daddr_t; /* disk address */
-#ifndef _BSD_TIME_T_DEFINED_
-#define _BSD_TIME_T_DEFINED_
-typedef _BSD_TIME_T_ time_t;
-#endif
+#include <sys/_types/_dev_t.h> /* device number */
+
+typedef u_int32_t fixpt_t; /* fixed point number */
-#ifndef _POSIX_SOURCE
-#define NBBY 8 /* number of bits in a byte */
+#include <sys/_types/_blkcnt_t.h>
+#include <sys/_types/_blksize_t.h>
+#include <sys/_types/_gid_t.h>
+#include <sys/_types/_in_addr_t.h>
+#include <sys/_types/_in_port_t.h>
+#include <sys/_types/_ino_t.h>
+#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
+#include <sys/_types/_ino64_t.h> /* 64bit inode number */
+#endif /* !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) */
+
+#include <sys/_types/_key_t.h>
+#include <sys/_types/_mode_t.h>
+#include <sys/_types/_nlink_t.h>
+#include <sys/_types/_id_t.h>
+#include <sys/_types/_pid_t.h>
+#include <sys/_types/_off_t.h>
+
+typedef int32_t segsz_t; /* segment size */
+typedef int32_t swblk_t; /* swap offset */
+
+#include <sys/_types/_uid_t.h>
+
+#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
+/* Major, minor numbers, dev_t's. */
+#if defined(__cplusplus)
/*
- * Select uses bit masks of file descriptors in longs. These macros
- * manipulate such bit fields (the filesystem macros use chars).
+ * These lowercase macros tend to match member functions in some C++ code,
+ * so for C++, we must use inline functions instead.
*/
-#ifndef FD_SETSIZE
-#define FD_SETSIZE 1024
-#endif
-typedef int32_t fd_mask;
-#define NFDBITS (sizeof(fd_mask) * NBBY) /* bits per mask */
+static inline __int32_t
+major(__uint32_t _x)
+{
+ return (__int32_t)(((__uint32_t)_x >> 24) & 0xff);
+}
+
+static inline __int32_t
+minor(__uint32_t _x)
+{
+ return (__int32_t)((_x) & 0xffffff);
+}
+
+static inline dev_t
+makedev(__uint32_t _major, __uint32_t _minor)
+{
+ return (dev_t)(((_major) << 24) | (_minor));
+}
-#ifndef howmany
-#define howmany(x, y) (((x) + ((y) - 1)) / (y))
+#else /* !__cplusplus */
+
+#define major(x) ((int32_t)(((u_int32_t)(x) >> 24) & 0xff))
+#define minor(x) ((int32_t)((x) & 0xffffff))
+#define makedev(x, y) ((dev_t)(((x) << 24) | (y)))
+
+#endif /* !__cplusplus */
+#endif /* !_POSIX_C_SOURCE */
+
+#include <sys/_types/_clock_t.h>
+#include <sys/_types/_size_t.h>
+#include <sys/_types/_ssize_t.h>
+#include <sys/_types/_time_t.h>
+
+#include <sys/_types/_useconds_t.h>
+#include <sys/_types/_suseconds_t.h>
+
+#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
+#include <sys/_types/_rsize_t.h>
+#include <sys/_types/_errno_t.h>
#endif
-typedef struct fd_set {
- fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)];
-} fd_set;
+#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
+/*
+ * This code is present here in order to maintain historical backward
+ * compatability, and is intended to be removed at some point in the
+ * future; please include <sys/select.h> instead.
+ */
+#include <sys/_types/_fd_def.h>
+
+#define NBBY __DARWIN_NBBY /* bits in a byte */
+#define NFDBITS __DARWIN_NFDBITS /* bits per mask */
+#define howmany(x, y) __DARWIN_howmany(x, y) /* # y's == x bits? */
+typedef __int32_t fd_mask;
+
+/*
+ * Select uses bit masks of file descriptors in longs. These macros
+ * manipulate such bit fields (the filesystem macros use chars). The
+ * extra protection here is to permit application redefinition above
+ * the default size.
+ */
+#include <sys/_types/_fd_setsize.h>
+#include <sys/_types/_fd_set.h>
+#include <sys/_types/_fd_clr.h>
+#include <sys/_types/_fd_zero.h>
+#include <sys/_types/_fd_isset.h>
+
+#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
+#include <sys/_types/_fd_copy.h>
+#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
-#define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS)))
-#define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
-#define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS)))
-#define FD_COPY(f, t) bcopy(f, t, sizeof(*(f)))
-#define FD_ZERO(p) bzero(p, sizeof(*(p)))
#if defined(__STDC__) && defined(KERNEL)
/*
* common structures that cross subsystem boundaries here; others are mostly
* used in the same place that the structure is defined.
*/
-struct proc;
-struct pgrp;
-struct ucred;
-struct rusage;
-struct file;
-struct buf;
-struct tty;
-struct uio;
+struct proc;
+struct pgrp;
+struct ucred;
+struct rusage;
+struct file;
+struct buf;
+struct tty;
+struct uio;
#endif
-#endif /* !_POSIX_SOURCE */
+#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
#endif /* __ASSEMBLER__ */
-struct _pthread_handler_rec
-{
- void (*routine)(void *); /* Routine to call */
- void *arg; /* Argument to pass */
- struct _pthread_handler_rec *next;
-};
+#ifndef KERNEL
#ifndef __POSIX_LIB__
-#define __PTHREAD_SIZE__ 596
-#define __PTHREAD_ATTR_SIZE__ 36
-#define __PTHREAD_MUTEXATTR_SIZE__ 8
-#define __PTHREAD_MUTEX_SIZE__ 40
-#define __PTHREAD_CONDATTR_SIZE__ 4
-#define __PTHREAD_COND_SIZE__ 24
-#define __PTHREAD_ONCE_SIZE__ 4
-#define __PTHREAD_RWLOCK_SIZE__ 124
-#define __PTHREAD_RWLOCKATTR_SIZE__ 12
-
-
-typedef struct _opaque_pthread_t { long sig; struct _pthread_handler_rec *cleanup_stack; char opaque[__PTHREAD_SIZE__];} *pthread_t;
-
-typedef struct _opaque_pthread_attr_t { long sig; char opaque[__PTHREAD_ATTR_SIZE__]; } pthread_attr_t;
-
-typedef struct _opaque_pthread_mutexattr_t { long sig; char opaque[__PTHREAD_MUTEXATTR_SIZE__]; } pthread_mutexattr_t;
+#include <sys/_pthread/_pthread_attr_t.h>
+#include <sys/_pthread/_pthread_cond_t.h>
+#include <sys/_pthread/_pthread_condattr_t.h>
+#include <sys/_pthread/_pthread_mutex_t.h>
+#include <sys/_pthread/_pthread_mutexattr_t.h>
+#include <sys/_pthread/_pthread_once_t.h>
+#include <sys/_pthread/_pthread_rwlock_t.h>
+#include <sys/_pthread/_pthread_rwlockattr_t.h>
+#include <sys/_pthread/_pthread_t.h>
-typedef struct _opaque_pthread_mutex_t { long sig; char opaque[__PTHREAD_MUTEX_SIZE__]; } pthread_mutex_t;
-
-typedef struct _opaque_pthread_condattr_t { long sig; char opaque[__PTHREAD_CONDATTR_SIZE__]; } pthread_condattr_t;
-
-typedef struct _opaque_pthread_cond_t { long sig; char opaque[__PTHREAD_COND_SIZE__]; } pthread_cond_t;
-
-typedef struct _opaque_pthread_rwlockattr_t { long sig; char opaque[__PTHREAD_RWLOCKATTR_SIZE__]; } pthread_rwlockattr_t;
+#endif /* __POSIX_LIB__ */
-typedef struct _opaque_pthread_rwlock_t { long sig; char opaque[__PTHREAD_RWLOCK_SIZE__]; } pthread_rwlock_t;
+#include <sys/_pthread/_pthread_key_t.h>
-typedef struct { long sig; char opaque[__PTHREAD_ONCE_SIZE__]; } pthread_once_t;
+#endif /* KERNEL */
-#endif /* __POSIX_LIB__ */
+/* statvfs and fstatvfs */
-typedef unsigned long pthread_key_t; /* Opaque 'pointer' */
+#include <sys/_types/_fsblkcnt_t.h>
+#include <sys/_types/_fsfilcnt_t.h>
#endif /* !_SYS_TYPES_H_ */