File: /usr/include/sys/_types/_fd_def.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       1: /*
       2:  * Copyright (c) 2003-2012 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: #ifndef _FD_SET
      29: #define _FD_SET
      30: /*
      31:  * Select uses bit masks of file descriptors in longs.  These macros
      32:  * manipulate such bit fields (the filesystem macros use chars).  The
      33:  * extra protection here is to permit application redefinition above
      34:  * the default size.
      35:  */
      36: #ifdef FD_SETSIZE
      37: #define    __DARWIN_FD_SETSIZE    FD_SETSIZE
      38: #else /* !FD_SETSIZE */
      39: #define    __DARWIN_FD_SETSIZE    1024
      40: #endif /* FD_SETSIZE */
      41: #define    __DARWIN_NBBY        8                /* bits in a byte */
      42: #define __DARWIN_NFDBITS    (sizeof(__int32_t) * __DARWIN_NBBY) /* bits per mask */
      43: #define    __DARWIN_howmany(x, y)    ((((x) % (y)) == 0) ? ((x) / (y)) : (((x) / (y)) + 1)) /* # y's == x bits? */
      44: 
      45: __BEGIN_DECLS
      46: typedef    struct fd_set {
      47:     __int32_t    fds_bits[__DARWIN_howmany(__DARWIN_FD_SETSIZE, __DARWIN_NFDBITS)];
      48: } fd_set;
      49: __END_DECLS
      50: 
      51: /* This inline avoids argument side-effect issues with FD_ISSET() */
      52: static __inline int
      53: __darwin_fd_isset(int _n, const struct fd_set *_p)
      54: {
      55:     return (_p->fds_bits[(unsigned long)_n/__DARWIN_NFDBITS] & ((__int32_t)(1<<((unsigned long)_n % __DARWIN_NFDBITS))));
      56: }
      57: 
      58: #define    __DARWIN_FD_SET(n, p)    do { int __fd = (n); ((p)->fds_bits[(unsigned long)__fd/__DARWIN_NFDBITS] |= ((__int32_t)(1<<((unsigned long)__fd % __DARWIN_NFDBITS)))); } while(0)
      59: #define    __DARWIN_FD_CLR(n, p)    do { int __fd = (n); ((p)->fds_bits[(unsigned long)__fd/__DARWIN_NFDBITS] &= ~((__int32_t)(1<<((unsigned long)__fd % __DARWIN_NFDBITS)))); } while(0)
      60: #define    __DARWIN_FD_ISSET(n, p)    __darwin_fd_isset((n), (p))
      61: 
      62: #if __GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ >= 3
      63: /*
      64:  * Use the built-in bzero function instead of the library version so that
      65:  * we do not pollute the namespace or introduce prototype warnings.
      66:  */
      67: #define    __DARWIN_FD_ZERO(p)    __builtin_bzero(p, sizeof(*(p)))
      68: #else
      69: #define    __DARWIN_FD_ZERO(p)    bzero(p, sizeof(*(p)))
      70: #endif
      71: 
      72: #define    __DARWIN_FD_COPY(f, t)    bcopy(f, t, sizeof(*(f)))
      73: #endif /* _FD_SET */
      74: