1 /* 2 * Copyright (c) 2006, 2010 Apple Inc. All rights reserved. 3 * 4 * @APPLE_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. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 24 25 #ifndef _SPAWN_H_ 26 #define _SPAWN_H_ 27 28 /* 29 * [SPN] Support for _POSIX_SPAWN 30 */ 31 32 #include <sys/cdefs.h> 33 #include <_types.h> 34 #include <sys/spawn.h> /* shared types */ 35 36 #include <Availability.h> 37 38 /* 39 * [SPN] Inclusion of the <spawn.h> header may make visible symbols defined 40 * in the <sched.h>, <signal.h>, and <sys/types.h> headers. 41 */ 42 #ifndef __FreeBSD__ 43 #ifndef _PID_T 44 typedef __darwin_pid_t pid_t; 45 #define _PID_T 46 #endif 47 48 #ifndef _SIGSET_T 49 #define _SIGSET_T 50 typedef __darwin_sigset_t sigset_t; 51 #endif 52 53 #ifndef _MODE_T 54 typedef __darwin_mode_t mode_t; 55 #define _MODE_T 56 #endif 57 #endif 58 59 /* 60 * Opaque types for use with posix_spawn() family functions. Internals are 61 * not defined, and should not be accessed directly. Types are defined as 62 * mandated by POSIX. 63 */ 64 typedef void *posix_spawnattr_t; 65 typedef void *posix_spawn_file_actions_t; 66 67 __BEGIN_DECLS 68 /* 69 * gcc under c99 mode won't compile "[ __restrict]" by itself. As a workaround, 70 * a dummy argument name is added. 71 */ 72 int posix_spawn(pid_t * __restrict, const char * __restrict, 73 const posix_spawn_file_actions_t *, 74 const posix_spawnattr_t * __restrict, 75 char *const __argv[ __restrict], 76 char *const __envp[ __restrict]) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 77 int posix_spawnp(pid_t * __restrict, const char * __restrict, 78 const posix_spawn_file_actions_t *, 79 const posix_spawnattr_t * __restrict, 80 char *const __argv[ __restrict], 81 char *const __envp[ __restrict]) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 82 int posix_spawn_file_actions_addclose(posix_spawn_file_actions_t *, int) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 83 int posix_spawn_file_actions_adddup2(posix_spawn_file_actions_t *, int, 84 int) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 85 int posix_spawn_file_actions_addopen( 86 posix_spawn_file_actions_t * __restrict, int, 87 const char * __restrict, int, mode_t) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 88 int posix_spawn_file_actions_destroy(posix_spawn_file_actions_t *) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 89 int posix_spawn_file_actions_init(posix_spawn_file_actions_t *) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 90 int posix_spawnattr_destroy(posix_spawnattr_t *) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 91 int posix_spawnattr_getsigdefault(const posix_spawnattr_t * __restrict, 92 sigset_t * __restrict) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 93 int posix_spawnattr_getflags(const posix_spawnattr_t * __restrict, 94 short * __restrict) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 95 int posix_spawnattr_getpgroup(const posix_spawnattr_t * __restrict, 96 pid_t * __restrict) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 97 int posix_spawnattr_getsigmask(const posix_spawnattr_t * __restrict, 98 sigset_t * __restrict) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 99 int posix_spawnattr_init(posix_spawnattr_t *) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 100 int posix_spawnattr_setsigdefault(posix_spawnattr_t * __restrict, 101 const sigset_t * __restrict) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 102 int posix_spawnattr_setflags(posix_spawnattr_t *, short) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 103 int posix_spawnattr_setpgroup(posix_spawnattr_t *, pid_t) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 104 int posix_spawnattr_setsigmask(posix_spawnattr_t * __restrict, 105 const sigset_t * __restrict) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 106 107 #if 0 /* _POSIX_PRIORITY_SCHEDULING [PS] : not supported */ 108 int posix_spawnattr_setschedparam(posix_spawnattr_t * __restrict, 109 const struct sched_param * __restrict); 110 int posix_spawnattr_setschedpolicy(posix_spawnattr_t *, int); 111 int posix_spawnattr_getschedparam(const posix_spawnattr_t * __restrict, 112 struct sched_param * __restrict); 113 int posix_spawnattr_getschedpolicy(const posix_spawnattr_t * __restrict, 114 int * __restrict); 115 #endif /* 0 */ 116 117 __END_DECLS 118 119 #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 120 /* 121 * Darwin-specific extensions below 122 */ 123 #include <mach/exception_types.h> 124 #include <mach/machine.h> 125 #include <mach/port.h> 126 127 #ifndef __FreeBSD__ 128 #ifndef _SIZE_T 129 typedef __darwin_size_t size_t; 130 #define _SIZE_T 131 #endif 132 #endif 133 __BEGIN_DECLS 134 135 int posix_spawnattr_getbinpref_np(const posix_spawnattr_t * __restrict, 136 size_t, cpu_type_t *__restrict, size_t *__restrict) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 137 int posix_spawnattr_setauditsessionport_np(posix_spawnattr_t *__restrict, 138 mach_port_t) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_2); 139 int posix_spawnattr_setbinpref_np(posix_spawnattr_t * __restrict, 140 size_t, cpu_type_t *__restrict, size_t *__restrict) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 141 int posix_spawnattr_setexceptionports_np(posix_spawnattr_t *__restrict, 142 exception_mask_t, mach_port_t, 143 exception_behavior_t, thread_state_flavor_t) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 144 int posix_spawnattr_setspecialport_np(posix_spawnattr_t *__restrict, 145 mach_port_t, int) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 146 int posix_spawn_file_actions_addinherit_np(posix_spawn_file_actions_t *, 147 int) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3); 148 149 __END_DECLS 150 151 #endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */ 152 #endif /* _SPAWN_H_ */ 153