xref: /trueos/lib/liblaunch/launch.h (revision 810023ee322d6fcd4c3bed917b0ffd2fb2421819)
1 #ifndef __XPC_LAUNCH_H__
2 #define __XPC_LAUNCH_H__
3 
4 /*!
5  * @header
6  * These interfaces were only ever documented for the purpose of allowing a
7  * launchd job to obtain file descriptors associated with the sockets it
8  * advertised in its launchd.plist(5). That functionality is now available in a
9  * much more straightforward fashion through the {@link launch_activate_socket}
10  * API.
11  *
12  * There are currently no replacements for other uses of the {@link launch_msg}
13  * API, including submitting, removing, starting, stopping and listing jobs.
14  */
15 
16 #ifndef __XPC_INDIRECT__
17 #define __XPC_INDIRECT__
18 #endif // __XPC_INDIRECT__
19 
20 #if XPC_BUILDING_LAUNCHD
21 // Temporary hack to resolve conflicting availability with launchd's existing
22 // internal headers.
23 #pragma GCC diagnostic ignored "-Wavailability"
24 #endif // XPC_BUILDING_LAUNCHD
25 
26 #include <xpc/base.h>
27 #include <Availability.h>
28 
29 #include <mach/mach.h>
30 #include <stddef.h>
31 #include <stdbool.h>
32 #include <sys/cdefs.h>
33 
34 __BEGIN_DECLS
35 
36 #define LAUNCH_KEY_SUBMITJOB "SubmitJob"
37 #define LAUNCH_KEY_REMOVEJOB "RemoveJob"
38 #define LAUNCH_KEY_STARTJOB "StartJob"
39 #define LAUNCH_KEY_STOPJOB "StopJob"
40 #define LAUNCH_KEY_GETJOB "GetJob"
41 #define LAUNCH_KEY_GETJOBS "GetJobs"
42 #define LAUNCH_KEY_CHECKIN "CheckIn"
43 
44 #define LAUNCH_JOBKEY_LABEL "Label"
45 #define LAUNCH_JOBKEY_DISABLED "Disabled"
46 #define LAUNCH_JOBKEY_USERNAME "UserName"
47 #define LAUNCH_JOBKEY_GROUPNAME "GroupName"
48 #define LAUNCH_JOBKEY_TIMEOUT "TimeOut"
49 #define LAUNCH_JOBKEY_EXITTIMEOUT "ExitTimeOut"
50 #define LAUNCH_JOBKEY_INITGROUPS "InitGroups"
51 #define LAUNCH_JOBKEY_SOCKETS "Sockets"
52 #define LAUNCH_JOBKEY_MACHSERVICES "MachServices"
53 #define LAUNCH_JOBKEY_MACHSERVICELOOKUPPOLICIES "MachServiceLookupPolicies"
54 #define LAUNCH_JOBKEY_INETDCOMPATIBILITY "inetdCompatibility"
55 #define LAUNCH_JOBKEY_ENABLEGLOBBING "EnableGlobbing"
56 #define LAUNCH_JOBKEY_PROGRAMARGUMENTS "ProgramArguments"
57 #define LAUNCH_JOBKEY_PROGRAM "Program"
58 #define LAUNCH_JOBKEY_ONDEMAND "OnDemand"
59 #define LAUNCH_JOBKEY_KEEPALIVE "KeepAlive"
60 #define LAUNCH_JOBKEY_LIMITLOADTOHOSTS "LimitLoadToHosts"
61 #define LAUNCH_JOBKEY_LIMITLOADFROMHOSTS "LimitLoadFromHosts"
62 #define LAUNCH_JOBKEY_LIMITLOADTOSESSIONTYPE "LimitLoadToSessionType"
63 #define LAUNCH_JOBKEY_LIMITLOADTOHARDWARE "LimitLoadToHardware"
64 #define LAUNCH_JOBKEY_LIMITLOADFROMHARDWARE "LimitLoadFromHardware"
65 #define LAUNCH_JOBKEY_RUNATLOAD "RunAtLoad"
66 #define LAUNCH_JOBKEY_ROOTDIRECTORY "RootDirectory"
67 #define LAUNCH_JOBKEY_WORKINGDIRECTORY "WorkingDirectory"
68 #define LAUNCH_JOBKEY_ENVIRONMENTVARIABLES "EnvironmentVariables"
69 #define LAUNCH_JOBKEY_USERENVIRONMENTVARIABLES "UserEnvironmentVariables"
70 #define LAUNCH_JOBKEY_UMASK "Umask"
71 #define LAUNCH_JOBKEY_NICE "Nice"
72 #define LAUNCH_JOBKEY_HOPEFULLYEXITSFIRST "HopefullyExitsFirst"
73 #define LAUNCH_JOBKEY_HOPEFULLYEXITSLAST "HopefullyExitsLast"
74 #define LAUNCH_JOBKEY_LOWPRIORITYIO "LowPriorityIO"
75 #define LAUNCH_JOBKEY_LOWPRIORITYBACKGROUNDIO "LowPriorityBackgroundIO"
76 #define LAUNCH_JOBKEY_SESSIONCREATE "SessionCreate"
77 #define LAUNCH_JOBKEY_STARTONMOUNT "StartOnMount"
78 #define LAUNCH_JOBKEY_SOFTRESOURCELIMITS "SoftResourceLimits"
79 #define LAUNCH_JOBKEY_HARDRESOURCELIMITS "HardResourceLimits"
80 #define LAUNCH_JOBKEY_STANDARDINPATH "StandardInPath"
81 #define LAUNCH_JOBKEY_STANDARDOUTPATH "StandardOutPath"
82 #define LAUNCH_JOBKEY_STANDARDERRORPATH "StandardErrorPath"
83 #define LAUNCH_JOBKEY_DEBUG "Debug"
84 #define LAUNCH_JOBKEY_WAITFORDEBUGGER "WaitForDebugger"
85 #define LAUNCH_JOBKEY_QUEUEDIRECTORIES "QueueDirectories"
86 #define LAUNCH_JOBKEY_WATCHPATHS "WatchPaths"
87 #define LAUNCH_JOBKEY_STARTINTERVAL "StartInterval"
88 #define LAUNCH_JOBKEY_STARTCALENDARINTERVAL "StartCalendarInterval"
89 #define LAUNCH_JOBKEY_BONJOURFDS "BonjourFDs"
90 #define LAUNCH_JOBKEY_LASTEXITSTATUS "LastExitStatus"
91 #define LAUNCH_JOBKEY_PID "PID"
92 #define LAUNCH_JOBKEY_THROTTLEINTERVAL "ThrottleInterval"
93 #define LAUNCH_JOBKEY_LAUNCHONLYONCE "LaunchOnlyOnce"
94 #define LAUNCH_JOBKEY_ABANDONPROCESSGROUP "AbandonProcessGroup"
95 #define LAUNCH_JOBKEY_IGNOREPROCESSGROUPATSHUTDOWN \
96 	"IgnoreProcessGroupAtShutdown"
97 #define LAUNCH_JOBKEY_LEGACYTIMERS "LegacyTimers"
98 #define LAUNCH_JOBKEY_ENABLEPRESSUREDEXIT "EnablePressuredExit"
99 #define LAUNCH_JOBKEY_DRAINMESSAGESONFAILEDINIT "DrainMessagesOnFailedInit"
100 
101 #define LAUNCH_JOBKEY_POLICIES "Policies"
102 #define LAUNCH_JOBKEY_ENABLETRANSACTIONS "EnableTransactions"
103 #define LAUNCH_JOBKEY_CFBUNDLEIDENTIFIER "CFBundleIdentifier"
104 #define LAUNCH_JOBKEY_PROCESSTYPE "ProcessType"
105 #define LAUNCH_KEY_PROCESSTYPE_APP "App"
106 #define LAUNCH_KEY_PROCESSTYPE_STANDARD "Standard"
107 #define LAUNCH_KEY_PROCESSTYPE_BACKGROUND "Background"
108 #define LAUNCH_KEY_PROCESSTYPE_INTERACTIVE "Interactive"
109 #define LAUNCH_KEY_PROCESSTYPE_ADAPTIVE "Adaptive"
110 
111 #define LAUNCH_JOBPOLICY_DENYCREATINGOTHERJOBS "DenyCreatingOtherJobs"
112 
113 #define LAUNCH_JOBINETDCOMPATIBILITY_WAIT "Wait"
114 
115 #define LAUNCH_JOBKEY_MACH_RESETATCLOSE "ResetAtClose"
116 #define LAUNCH_JOBKEY_MACH_HIDEUNTILCHECKIN "HideUntilCheckIn"
117 #define LAUNCH_JOBKEY_MACH_DRAINMESSAGESONCRASH "DrainMessagesOnCrash"
118 #define LAUNCH_JOBKEY_MACH_PINGEVENTUPDATES "PingEventUpdates"
119 
120 #define LAUNCH_JOBKEY_KEEPALIVE_SUCCESSFULEXIT "SuccessfulExit"
121 #define LAUNCH_JOBKEY_KEEPALIVE_NETWORKSTATE "NetworkState"
122 #define LAUNCH_JOBKEY_KEEPALIVE_PATHSTATE "PathState"
123 #define LAUNCH_JOBKEY_KEEPALIVE_OTHERJOBACTIVE "OtherJobActive"
124 #define LAUNCH_JOBKEY_KEEPALIVE_OTHERJOBENABLED "OtherJobEnabled"
125 #define LAUNCH_JOBKEY_KEEPALIVE_AFTERINITIALDEMAND	"AfterInitialDemand"
126 #define LAUNCH_JOBKEY_KEEPALIVE_CRASHED "Crashed"
127 
128 #define LAUNCH_JOBKEY_LAUNCHEVENTS "LaunchEvents"
129 
130 #define LAUNCH_JOBKEY_CAL_MINUTE "Minute"
131 #define LAUNCH_JOBKEY_CAL_HOUR "Hour"
132 #define LAUNCH_JOBKEY_CAL_DAY "Day"
133 #define LAUNCH_JOBKEY_CAL_WEEKDAY "Weekday"
134 #define LAUNCH_JOBKEY_CAL_MONTH "Month"
135 
136 #define LAUNCH_JOBKEY_RESOURCELIMIT_CORE "Core"
137 #define LAUNCH_JOBKEY_RESOURCELIMIT_CPU "CPU"
138 #define LAUNCH_JOBKEY_RESOURCELIMIT_DATA "Data"
139 #define LAUNCH_JOBKEY_RESOURCELIMIT_FSIZE "FileSize"
140 #define LAUNCH_JOBKEY_RESOURCELIMIT_MEMLOCK "MemoryLock"
141 #define LAUNCH_JOBKEY_RESOURCELIMIT_NOFILE "NumberOfFiles"
142 #define LAUNCH_JOBKEY_RESOURCELIMIT_NPROC "NumberOfProcesses"
143 #define LAUNCH_JOBKEY_RESOURCELIMIT_RSS "ResidentSetSize"
144 #define LAUNCH_JOBKEY_RESOURCELIMIT_STACK "Stack"
145 
146 #define LAUNCH_JOBKEY_DISABLED_MACHINETYPE "MachineType"
147 #define LAUNCH_JOBKEY_DISABLED_MODELNAME "ModelName"
148 
149 #define LAUNCH_JOBSOCKETKEY_TYPE "SockType"
150 #define LAUNCH_JOBSOCKETKEY_PASSIVE "SockPassive"
151 #define LAUNCH_JOBSOCKETKEY_BONJOUR "Bonjour"
152 #define LAUNCH_JOBSOCKETKEY_SECUREWITHKEY "SecureSocketWithKey"
153 #define LAUNCH_JOBSOCKETKEY_PATHNAME "SockPathName"
154 #define LAUNCH_JOBSOCKETKEY_PATHMODE "SockPathMode"
155 #define LAUNCH_JOBSOCKETKEY_PATHOWNER "SockPathOwner"
156 #define LAUNCH_JOBSOCKETKEY_PATHGROUP "SockPathGroup"
157 #define LAUNCH_JOBSOCKETKEY_NODENAME "SockNodeName"
158 #define LAUNCH_JOBSOCKETKEY_SERVICENAME "SockServiceName"
159 #define LAUNCH_JOBSOCKETKEY_FAMILY "SockFamily"
160 #define LAUNCH_JOBSOCKETKEY_PROTOCOL "SockProtocol"
161 #define LAUNCH_JOBSOCKETKEY_MULTICASTGROUP "MulticastGroup"
162 
163 #define LAUNCH_JOBKEY_PROCESSTYPE "ProcessType"
164 #define LAUNCH_KEY_PROCESSTYPE_APP "App"
165 #define LAUNCH_KEY_PROCESSTYPE_STANDARD "Standard"
166 #define LAUNCH_KEY_PROCESSTYPE_BACKGROUND "Background"
167 #define LAUNCH_KEY_PROCESSTYPE_INTERACTIVE "Interactive"
168 #define LAUNCH_KEY_PROCESSTYPE_ADAPTIVE "Adaptive"
169 
170 /*!
171  * @function launch_activate_socket
172  *
173  * @abstract
174  * Retrieves the file descriptors for sockets specified in the process'
175  * launchd.plist(5).
176  *
177  * @param name
178  * The name of the socket entry in the service's Sockets dictionary.
179  *
180  * @param fds
181  * On return, this parameter will be populated with an array of file
182  * descriptors. One socket can have many descriptors associated with it
183  * depending on the characteristics of the network interfaces on the system.
184  * The descriptors in this array are the results of calling getaddrinfo(3) with
185  * the parameters described in launchd.plist(5).
186  *
187  * The caller is responsible for calling free(3) on the returned pointer.
188  *
189  * @param cnt
190  * The number of file descriptor entries in the returned array.
191  *
192  * @result
193  * On success, zero is returned. Otherwise, an appropriate POSIX-domain is
194  * returned. Possible error codes are:
195  *
196  * ENOENT -> There was no socket of the specified name owned by the caller.
197  * ESRCH -> The caller is not a process managed by launchd.
198  * EALREADY -> The socket has already been activated by the caller.
199  */
200 __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0)
201 XPC_EXPORT XPC_WARN_RESULT XPC_NONNULL1 XPC_NONNULL2 XPC_NONNULL3
202 int
203 launch_activate_socket(const char *name, int **fds, size_t *cnt);
204 
205 typedef struct _launch_data *launch_data_t;
206 typedef void (*launch_data_dict_iterator_t)(const launch_data_t lval,
207 	const char *key, void *ctx);
208 
209 typedef enum {
210 	LAUNCH_DATA_DICTIONARY = 1,
211 	LAUNCH_DATA_ARRAY,
212 	LAUNCH_DATA_FD,
213 	LAUNCH_DATA_INTEGER,
214 	LAUNCH_DATA_REAL,
215 	LAUNCH_DATA_BOOL,
216 	LAUNCH_DATA_STRING,
217 	LAUNCH_DATA_OPAQUE,
218 	LAUNCH_DATA_ERRNO,
219 	LAUNCH_DATA_MACHPORT,
220 } launch_data_type_t;
221 
222 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
223 XPC_EXPORT XPC_MALLOC XPC_WARN_RESULT
224 launch_data_t
225 launch_data_alloc(launch_data_type_t type);
226 
227 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
228 XPC_EXPORT XPC_MALLOC XPC_WARN_RESULT XPC_NONNULL1
229 launch_data_t
230 launch_data_copy(launch_data_t ld);
231 
232 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
233 XPC_EXPORT XPC_WARN_RESULT XPC_NONNULL1
234 launch_data_type_t
235 launch_data_get_type(const launch_data_t ld);
236 
237 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
238 XPC_EXPORT XPC_NONNULL1
239 void
240 launch_data_free(launch_data_t ld);
241 
242 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
243 XPC_EXPORT XPC_NONNULL1 XPC_NONNULL2 XPC_NONNULL3
244 bool
245 launch_data_dict_insert(launch_data_t ldict, const launch_data_t lval,
246 	const char *key);
247 
248 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
249 XPC_EXPORT XPC_WARN_RESULT XPC_NONNULL1 XPC_NONNULL2
250 launch_data_t
251 launch_data_dict_lookup(const launch_data_t ldict, const char *key);
252 
253 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
254 XPC_EXPORT XPC_NONNULL1 XPC_NONNULL2
255 bool
256 launch_data_dict_remove(launch_data_t ldict, const char *key);
257 
258 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
259 XPC_EXPORT XPC_NONNULL1 XPC_NONNULL2
260 void
261 launch_data_dict_iterate(const launch_data_t ldict,
262 	launch_data_dict_iterator_t iterator, void *ctx);
263 
264 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
265 XPC_EXPORT XPC_WARN_RESULT XPC_NONNULL1
266 size_t
267 launch_data_dict_get_count(const launch_data_t ldict);
268 
269 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
270 XPC_EXPORT XPC_NONNULL1
271 bool
272 launch_data_array_set_index(launch_data_t larray, const launch_data_t lval,
273 	size_t idx);
274 
275 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
276 XPC_EXPORT XPC_WARN_RESULT XPC_NONNULL1
277 launch_data_t
278 launch_data_array_get_index(const launch_data_t larray, size_t idx);
279 
280 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
281 XPC_EXPORT XPC_WARN_RESULT XPC_NONNULL1
282 size_t
283 launch_data_array_get_count(const launch_data_t larray);
284 
285 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
286 XPC_EXPORT XPC_MALLOC XPC_WARN_RESULT
287 launch_data_t
288 launch_data_new_fd(int fd);
289 
290 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
291 XPC_EXPORT XPC_MALLOC XPC_WARN_RESULT
292 launch_data_t
293 launch_data_new_machport(mach_port_t val);
294 
295 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
296 XPC_EXPORT XPC_MALLOC XPC_WARN_RESULT
297 launch_data_t
298 launch_data_new_integer(long long val);
299 
300 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
301 XPC_EXPORT XPC_MALLOC XPC_WARN_RESULT
302 launch_data_t
303 launch_data_new_bool(bool val);
304 
305 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
306 XPC_EXPORT XPC_MALLOC XPC_WARN_RESULT
307 launch_data_t
308 launch_data_new_real(double val);
309 
310 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
311 XPC_EXPORT XPC_MALLOC XPC_WARN_RESULT
312 launch_data_t
313 launch_data_new_string(const char *val);
314 
315 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
316 XPC_EXPORT XPC_MALLOC XPC_WARN_RESULT
317 launch_data_t
318 launch_data_new_opaque(const void *bytes, size_t sz);
319 
320 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
321 XPC_EXPORT XPC_NONNULL1
322 bool
323 launch_data_set_fd(launch_data_t ld, int fd);
324 
325 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
326 XPC_EXPORT XPC_NONNULL1
327 bool
328 launch_data_set_machport(launch_data_t ld, mach_port_t mp);
329 
330 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
331 XPC_EXPORT XPC_NONNULL1
332 bool
333 launch_data_set_integer(launch_data_t ld, long long val);
334 
335 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
336 XPC_EXPORT XPC_NONNULL1
337 bool
338 launch_data_set_bool(launch_data_t ld, bool val);
339 
340 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
341 XPC_EXPORT XPC_NONNULL1
342 bool
343 launch_data_set_real(launch_data_t ld, double val);
344 
345 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
346 XPC_EXPORT XPC_NONNULL1
347 bool
348 launch_data_set_string(launch_data_t ld, const char *val);
349 
350 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
351 XPC_EXPORT XPC_NONNULL1
352 bool
353 launch_data_set_opaque(launch_data_t ld, const void *bytes, size_t sz);
354 
355 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
356 XPC_EXPORT XPC_WARN_RESULT XPC_NONNULL1
357 int
358 launch_data_get_fd(const launch_data_t ld);
359 
360 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
361 XPC_EXPORT XPC_WARN_RESULT XPC_NONNULL1
362 mach_port_t
363 launch_data_get_machport(const launch_data_t ld);
364 
365 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
366 XPC_EXPORT XPC_WARN_RESULT XPC_NONNULL1
367 long long
368 launch_data_get_integer(const launch_data_t ld);
369 
370 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
371 XPC_EXPORT XPC_WARN_RESULT XPC_NONNULL1
372 bool
373 launch_data_get_bool(const launch_data_t ld);
374 
375 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
376 XPC_EXPORT XPC_WARN_RESULT XPC_NONNULL1
377 double
378 launch_data_get_real(const launch_data_t ld);
379 
380 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
381 XPC_EXPORT XPC_WARN_RESULT XPC_NONNULL1
382 const char *
383 launch_data_get_string(const launch_data_t ld);
384 
385 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
386 XPC_EXPORT XPC_WARN_RESULT XPC_NONNULL1
387 void *
388 launch_data_get_opaque(const launch_data_t ld);
389 
390 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
391 XPC_EXPORT XPC_WARN_RESULT XPC_NONNULL1
392 size_t
393 launch_data_get_opaque_size(const launch_data_t ld);
394 
395 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
396 XPC_EXPORT XPC_WARN_RESULT XPC_NONNULL1
397 int
398 launch_data_get_errno(const launch_data_t ld);
399 
400 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
401 XPC_EXPORT XPC_WARN_RESULT
402 int
403 launch_get_fd(void);
404 
405 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_4, __MAC_10_10, __IPHONE_2_0, __IPHONE_8_0)
406 XPC_EXPORT XPC_MALLOC XPC_WARN_RESULT XPC_NONNULL1
407 launch_data_t
408 launch_msg(const launch_data_t request);
409 
410 __END_DECLS
411 
412 #endif // __XPC_LAUNCH_H__
413