this repo has no description
at fixPythonPipStalling 353 lines 10 kB view raw
1/* 2 * Copyright (c) 2005 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_APACHE_LICENSE_HEADER_START@ 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 * 18 * @APPLE_APACHE_LICENSE_HEADER_END@ 19 */ 20 21#ifndef __LAUNCH_H__ 22#define __LAUNCH_H__ 23 24#include <mach/mach.h> 25#include <sys/cdefs.h> 26#include <stddef.h> 27#include <stdbool.h> 28 29#pragma GCC visibility push(default) 30 31__BEGIN_DECLS 32 33#ifdef __GNUC__ 34#define __ld_normal __attribute__((__nothrow__)) 35#define __ld_setter __attribute__((__nothrow__, __nonnull__)) 36#define __ld_getter __attribute__((__nothrow__, __nonnull__, __pure__, __warn_unused_result__)) 37#define __ld_iterator(x, y) __attribute__((__nonnull__(x, y))) 38#define __ld_allocator __attribute__((__nothrow__, __malloc__, __nonnull__, __warn_unused_result__)) 39#else 40#define __ld_normal 41#define __ld_setter 42#define __ld_getter 43#define __ld_iterator(x, y) 44#define __ld_allocator 45#endif 46 47#define LAUNCH_KEY_SUBMITJOB "SubmitJob" 48#define LAUNCH_KEY_REMOVEJOB "RemoveJob" 49#define LAUNCH_KEY_STARTJOB "StartJob" 50#define LAUNCH_KEY_STOPJOB "StopJob" 51#define LAUNCH_KEY_GETJOB "GetJob" 52#define LAUNCH_KEY_GETJOBS "GetJobs" 53#define LAUNCH_KEY_CHECKIN "CheckIn" 54 55#define LAUNCH_JOBKEY_DEFAULTS "__Defaults" 56 57#define LAUNCH_JOBKEY_LABEL "Label" 58#define LAUNCH_JOBKEY_DISABLED "Disabled" 59#define LAUNCH_JOBKEY_USERNAME "UserName" 60#define LAUNCH_JOBKEY_GROUPNAME "GroupName" 61#define LAUNCH_JOBKEY_TIMEOUT "TimeOut" 62#define LAUNCH_JOBKEY_EXITTIMEOUT "ExitTimeOut" 63#define LAUNCH_JOBKEY_INITGROUPS "InitGroups" 64#define LAUNCH_JOBKEY_SOCKETS "Sockets" 65#define LAUNCH_JOBKEY_MACHSERVICES "MachServices" 66#define LAUNCH_JOBKEY_MACHSERVICELOOKUPPOLICIES "MachServiceLookupPolicies" 67#define LAUNCH_JOBKEY_INETDCOMPATIBILITY "inetdCompatibility" 68#define LAUNCH_JOBKEY_ENABLEGLOBBING "EnableGlobbing" 69#define LAUNCH_JOBKEY_PROGRAMARGUMENTS "ProgramArguments" 70#define LAUNCH_JOBKEY_PROGRAM "Program" 71#define LAUNCH_JOBKEY_ONDEMAND "OnDemand" 72#define LAUNCH_JOBKEY_KEEPALIVE "KeepAlive" 73#define LAUNCH_JOBKEY_LIMITLOADTOHOSTS "LimitLoadToHosts" 74#define LAUNCH_JOBKEY_LIMITLOADFROMHOSTS "LimitLoadFromHosts" 75#define LAUNCH_JOBKEY_LIMITLOADTOSESSIONTYPE "LimitLoadToSessionType" 76#define LAUNCH_JOBKEY_LIMITLOADTOHARDWARE "LimitLoadToHardware" 77#define LAUNCH_JOBKEY_LIMITLOADFROMHARDWARE "LimitLoadFromHardware" 78#define LAUNCH_JOBKEY_RUNATLOAD "RunAtLoad" 79#define LAUNCH_JOBKEY_ROOTDIRECTORY "RootDirectory" 80#define LAUNCH_JOBKEY_WORKINGDIRECTORY "WorkingDirectory" 81#define LAUNCH_JOBKEY_ENVIRONMENTVARIABLES "EnvironmentVariables" 82#define LAUNCH_JOBKEY_USERENVIRONMENTVARIABLES "UserEnvironmentVariables" 83#define LAUNCH_JOBKEY_UMASK "Umask" 84#define LAUNCH_JOBKEY_NICE "Nice" 85#define LAUNCH_JOBKEY_HOPEFULLYEXITSFIRST "HopefullyExitsFirst" 86#define LAUNCH_JOBKEY_HOPEFULLYEXITSLAST "HopefullyExitsLast" 87#define LAUNCH_JOBKEY_LOWPRIORITYIO "LowPriorityIO" 88#define LAUNCH_JOBKEY_SESSIONCREATE "SessionCreate" 89#define LAUNCH_JOBKEY_STARTONMOUNT "StartOnMount" 90#define LAUNCH_JOBKEY_SOFTRESOURCELIMITS "SoftResourceLimits" 91#define LAUNCH_JOBKEY_HARDRESOURCELIMITS "HardResourceLimits" 92#define LAUNCH_JOBKEY_STANDARDINPATH "StandardInPath" 93#define LAUNCH_JOBKEY_STANDARDOUTPATH "StandardOutPath" 94#define LAUNCH_JOBKEY_STANDARDERRORPATH "StandardErrorPath" 95#define LAUNCH_JOBKEY_DEBUG "Debug" 96#define LAUNCH_JOBKEY_WAITFORDEBUGGER "WaitForDebugger" 97#define LAUNCH_JOBKEY_QUEUEDIRECTORIES "QueueDirectories" 98#define LAUNCH_JOBKEY_WATCHPATHS "WatchPaths" 99#define LAUNCH_JOBKEY_STARTINTERVAL "StartInterval" 100#define LAUNCH_JOBKEY_STARTCALENDARINTERVAL "StartCalendarInterval" 101#define LAUNCH_JOBKEY_BONJOURFDS "BonjourFDs" 102#define LAUNCH_JOBKEY_LASTEXITSTATUS "LastExitStatus" 103#define LAUNCH_JOBKEY_PID "PID" 104#define LAUNCH_JOBKEY_THROTTLEINTERVAL "ThrottleInterval" 105#define LAUNCH_JOBKEY_LAUNCHONLYONCE "LaunchOnlyOnce" 106#define LAUNCH_JOBKEY_ABANDONPROCESSGROUP "AbandonProcessGroup" 107#define LAUNCH_JOBKEY_IGNOREPROCESSGROUPATSHUTDOWN "IgnoreProcessGroupAtShutdown" 108#define LAUNCH_JOBKEY_POLICIES "Policies" 109#define LAUNCH_JOBKEY_ENABLETRANSACTIONS "EnableTransactions" 110#define LAUNCH_JOBKEY_CFBUNDLEIDENTIFIER "CFBundleIdentifier" 111#define LAUNCH_JOBKEY_PROCESSTYPE "ProcessType" 112#define LAUNCH_KEY_PROCESSTYPE_APP "App" 113#define LAUNCH_KEY_PROCESSTYPE_STANDARD "Standard" 114#define LAUNCH_KEY_PROCESSTYPE_BACKGROUND "Background" 115#define LAUNCH_KEY_PROCESSTYPE_INTERACTIVE "Interactive" 116#define LAUNCH_KEY_PROCESSTYPE_ADAPTIVE "Adaptive" 117 118#define LAUNCH_JOBPOLICY_DENYCREATINGOTHERJOBS "DenyCreatingOtherJobs" 119 120#define LAUNCH_JOBINETDCOMPATIBILITY_WAIT "Wait" 121 122#define LAUNCH_JOBKEY_MACH_RESETATCLOSE "ResetAtClose" 123#define LAUNCH_JOBKEY_MACH_HIDEUNTILCHECKIN "HideUntilCheckIn" 124#define LAUNCH_JOBKEY_MACH_DRAINMESSAGESONCRASH "DrainMessagesOnCrash" 125#define LAUNCH_JOBKEY_MACH_PINGEVENTUPDATES "PingEventUpdates" 126 127#define LAUNCH_JOBKEY_KEEPALIVE_SUCCESSFULEXIT "SuccessfulExit" 128#define LAUNCH_JOBKEY_KEEPALIVE_NETWORKSTATE "NetworkState" 129#define LAUNCH_JOBKEY_KEEPALIVE_PATHSTATE "PathState" 130#define LAUNCH_JOBKEY_KEEPALIVE_OTHERJOBACTIVE "OtherJobActive" 131#define LAUNCH_JOBKEY_KEEPALIVE_OTHERJOBENABLED "OtherJobEnabled" 132#define LAUNCH_JOBKEY_KEEPALIVE_AFTERINITIALDEMAND "AfterInitialDemand" 133#define LAUNCH_JOBKEY_KEEPALIVE_CRASHED "Crashed" 134 135#define LAUNCH_JOBKEY_LAUNCHEVENTS "LaunchEvents" 136 137#define LAUNCH_JOBKEY_CAL_MINUTE "Minute" 138#define LAUNCH_JOBKEY_CAL_HOUR "Hour" 139#define LAUNCH_JOBKEY_CAL_DAY "Day" 140#define LAUNCH_JOBKEY_CAL_WEEKDAY "Weekday" 141#define LAUNCH_JOBKEY_CAL_MONTH "Month" 142 143#define LAUNCH_JOBKEY_RESOURCELIMIT_CORE "Core" 144#define LAUNCH_JOBKEY_RESOURCELIMIT_CPU "CPU" 145#define LAUNCH_JOBKEY_RESOURCELIMIT_DATA "Data" 146#define LAUNCH_JOBKEY_RESOURCELIMIT_FSIZE "FileSize" 147#define LAUNCH_JOBKEY_RESOURCELIMIT_MEMLOCK "MemoryLock" 148#define LAUNCH_JOBKEY_RESOURCELIMIT_NOFILE "NumberOfFiles" 149#define LAUNCH_JOBKEY_RESOURCELIMIT_NPROC "NumberOfProcesses" 150#define LAUNCH_JOBKEY_RESOURCELIMIT_RSS "ResidentSetSize" 151#define LAUNCH_JOBKEY_RESOURCELIMIT_STACK "Stack" 152 153#define LAUNCH_JOBKEY_DISABLED_MACHINETYPE "MachineType" 154#define LAUNCH_JOBKEY_DISABLED_MODELNAME "ModelName" 155 156#define LAUNCH_JOBSOCKETKEY_TYPE "SockType" 157#define LAUNCH_JOBSOCKETKEY_PASSIVE "SockPassive" 158#define LAUNCH_JOBSOCKETKEY_BONJOUR "Bonjour" 159#define LAUNCH_JOBSOCKETKEY_SECUREWITHKEY "SecureSocketWithKey" 160#define LAUNCH_JOBSOCKETKEY_PATHNAME "SockPathName" 161#define LAUNCH_JOBSOCKETKEY_PATHMODE "SockPathMode" 162#define LAUNCH_JOBSOCKETKEY_NODENAME "SockNodeName" 163#define LAUNCH_JOBSOCKETKEY_SERVICENAME "SockServiceName" 164#define LAUNCH_JOBSOCKETKEY_FAMILY "SockFamily" 165#define LAUNCH_JOBSOCKETKEY_PROTOCOL "SockProtocol" 166#define LAUNCH_JOBSOCKETKEY_MULTICASTGROUP "MulticastGroup" 167 168/* These APIs are NOT suitable for general use. Their use should be constrained 169 * to checking into launchd to obtain socket file descriptors using the 170 * LAUNCH_CHECK_IN message type. 171 */ 172typedef struct _launch_data *launch_data_t; 173 174typedef enum { 175 LAUNCH_DATA_DICTIONARY = 1, 176 LAUNCH_DATA_ARRAY, 177 LAUNCH_DATA_FD, 178 LAUNCH_DATA_INTEGER, 179 LAUNCH_DATA_REAL, 180 LAUNCH_DATA_BOOL, 181 LAUNCH_DATA_STRING, 182 LAUNCH_DATA_OPAQUE, 183 LAUNCH_DATA_ERRNO, 184 LAUNCH_DATA_MACHPORT, 185} launch_data_type_t; 186 187int 188launch_activate_socket(const char* key, int** fds, size_t* count); 189 190__ld_allocator 191launch_data_t 192launch_data_alloc(launch_data_type_t); 193 194__ld_allocator 195launch_data_t 196launch_data_copy(launch_data_t); 197 198__ld_getter 199launch_data_type_t 200launch_data_get_type(const launch_data_t); 201 202__ld_setter 203void 204launch_data_free(launch_data_t); 205 206__ld_setter 207bool 208launch_data_dict_insert(launch_data_t, const launch_data_t, const char *); 209 210__ld_getter 211launch_data_t 212launch_data_dict_lookup(const launch_data_t, const char *); 213 214__ld_setter 215bool 216launch_data_dict_remove(launch_data_t, const char *); 217 218__ld_iterator(1, 2) 219void 220launch_data_dict_iterate(const launch_data_t, 221 void (*)(const launch_data_t, const char *, void *), void *); 222 223__ld_getter 224size_t 225launch_data_dict_get_count(const launch_data_t); 226 227__ld_setter 228bool 229launch_data_array_set_index(launch_data_t, const launch_data_t, size_t); 230 231__ld_getter 232launch_data_t 233launch_data_array_get_index(const launch_data_t, size_t); 234 235__ld_getter 236size_t 237launch_data_array_get_count(const launch_data_t); 238 239__ld_allocator 240launch_data_t 241launch_data_new_fd(int); 242 243__ld_allocator 244launch_data_t 245launch_data_new_machport(mach_port_t); 246 247__ld_allocator 248launch_data_t 249launch_data_new_integer(long long); 250 251__ld_allocator 252launch_data_t 253launch_data_new_bool(bool); 254 255__ld_allocator 256launch_data_t 257launch_data_new_real(double); 258 259__ld_allocator 260launch_data_t 261launch_data_new_string(const char *); 262 263__ld_allocator 264launch_data_t 265launch_data_new_opaque(const void *, size_t); 266 267 __ld_setter 268bool 269launch_data_set_fd(launch_data_t, int); 270 271 __ld_setter 272bool 273launch_data_set_machport(launch_data_t, mach_port_t); 274 275 __ld_setter 276bool 277launch_data_set_integer(launch_data_t, long long); 278 279 __ld_setter 280bool 281launch_data_set_bool(launch_data_t, bool); 282 283 __ld_setter 284bool 285launch_data_set_real(launch_data_t, double); 286 287 __ld_setter 288bool 289launch_data_set_string(launch_data_t, const char *); 290 291 __ld_setter 292bool 293launch_data_set_opaque(launch_data_t, const void *, size_t); 294 295__ld_getter 296int 297launch_data_get_fd(const launch_data_t); 298 299__ld_getter 300mach_port_t 301launch_data_get_machport(const launch_data_t); 302 303__ld_getter 304long long 305launch_data_get_integer(const launch_data_t); 306 307__ld_getter 308bool 309launch_data_get_bool(const launch_data_t); 310 311__ld_getter 312double 313launch_data_get_real(const launch_data_t); 314 315__ld_getter 316const char * 317launch_data_get_string(const launch_data_t); 318 319__ld_getter 320void * 321launch_data_get_opaque(const launch_data_t); 322 323__ld_getter 324size_t 325launch_data_get_opaque_size(const launch_data_t); 326 327__ld_getter 328int 329launch_data_get_errno(const launch_data_t); 330 331 332/* launch_get_fd() 333 * 334 * Use this to get the FD if you're doing asynchronous I/O with select(), 335 * poll() or kevent(). 336 */ 337__ld_normal 338int 339launch_get_fd(void); 340 341/* launch_msg() 342 * 343 * Use this API to check in. Nothing else. 344 */ 345__ld_normal 346launch_data_t 347launch_msg(const launch_data_t); 348 349__END_DECLS 350 351#pragma GCC visibility pop 352 353#endif /* __LAUNCH_H__ */