blob: 3a4cd11b741e1ef5efb7160486ef45b1b7fc5ee4 [file] [log] [blame]
Elliott Hughes14e3ff92017-10-06 16:58:36 -07001/*
2 * Copyright (C) 2017 The Android Open Source Project
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in
12 * the documentation and/or other materials provided with the
13 * distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 */
28
Elliott Hughesc0f84c92025-04-09 06:24:03 -070029#pragma once
Elliott Hughes14e3ff92017-10-06 16:58:36 -070030
31#include <sys/cdefs.h>
32#include <sys/types.h>
33#include <sched.h>
34#include <signal.h>
35
36__BEGIN_DECLS
37
38#define POSIX_SPAWN_RESETIDS 1
39#define POSIX_SPAWN_SETPGROUP 2
40#define POSIX_SPAWN_SETSIGDEF 4
41#define POSIX_SPAWN_SETSIGMASK 8
42#define POSIX_SPAWN_SETSCHEDPARAM 16
43#define POSIX_SPAWN_SETSCHEDULER 32
44#if defined(__USE_GNU)
45#define POSIX_SPAWN_USEVFORK 64
Elliott Hughesc0f84c92025-04-09 06:24:03 -070046#endif
47#if defined(__USE_GNU)
Elliott Hughes14e3ff92017-10-06 16:58:36 -070048#define POSIX_SPAWN_SETSID 128
49#endif
Elliott Hughes2229e552024-08-22 17:12:23 +000050/**
51 * Used with posix_spawnattr_setflags() to mark all fds except
52 * stdin/stdout/stderr as O_CLOEXEC prior to executing registered file actions.
53 */
Maciej Żenczykowski262b8732022-01-20 14:56:20 -080054#define POSIX_SPAWN_CLOEXEC_DEFAULT 256
Elliott Hughes14e3ff92017-10-06 16:58:36 -070055
56typedef struct __posix_spawnattr* posix_spawnattr_t;
57typedef struct __posix_spawn_file_actions* posix_spawn_file_actions_t;
58
Dan Albert02ce4012024-10-25 19:13:49 +000059#if __BIONIC_AVAILABILITY_GUARD(28)
Elliott Hughes2229e552024-08-22 17:12:23 +000060int posix_spawn(pid_t* _Nullable __pid, const char* _Nonnull __path, const posix_spawn_file_actions_t _Nullable * _Nullable __actions, const posix_spawnattr_t _Nullable * _Nullable __attr, char* const _Nullable __argv[_Nullable], char* const _Nullable __env[_Nullable]) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -070061#endif
62
63#if __BIONIC_AVAILABILITY_GUARD(28)
Elliott Hughes2229e552024-08-22 17:12:23 +000064int posix_spawnp(pid_t* _Nullable __pid, const char* _Nonnull __file, const posix_spawn_file_actions_t _Nullable * _Nullable __actions, const posix_spawnattr_t _Nullable * _Nullable __attr, char* const _Nullable __argv[_Nullable], char* const _Nullable __env[_Nullable]) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -070065#endif
Elliott Hughes14e3ff92017-10-06 16:58:36 -070066
Elliott Hughesc0f84c92025-04-09 06:24:03 -070067#if __BIONIC_AVAILABILITY_GUARD(28)
zijunzhao148476d2024-02-29 22:55:00 +000068int posix_spawnattr_init(posix_spawnattr_t _Nullable * _Nonnull __attr) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -070069#endif
70
71#if __BIONIC_AVAILABILITY_GUARD(28)
zijunzhao8f23da62023-03-31 06:08:20 +000072int posix_spawnattr_destroy(posix_spawnattr_t _Nonnull * _Nonnull __attr) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -070073#endif
Elliott Hughes14e3ff92017-10-06 16:58:36 -070074
Elliott Hughesc0f84c92025-04-09 06:24:03 -070075#if __BIONIC_AVAILABILITY_GUARD(28)
zijunzhao8f23da62023-03-31 06:08:20 +000076int posix_spawnattr_setflags(posix_spawnattr_t _Nonnull * _Nonnull __attr, short __flags) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -070077#endif
78
79#if __BIONIC_AVAILABILITY_GUARD(28)
zijunzhao8f23da62023-03-31 06:08:20 +000080int posix_spawnattr_getflags(const posix_spawnattr_t _Nonnull * _Nonnull __attr, short* _Nonnull __flags) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -070081#endif
Elliott Hughes14e3ff92017-10-06 16:58:36 -070082
Elliott Hughesc0f84c92025-04-09 06:24:03 -070083#if __BIONIC_AVAILABILITY_GUARD(28)
zijunzhao8f23da62023-03-31 06:08:20 +000084int posix_spawnattr_setpgroup(posix_spawnattr_t _Nonnull * _Nonnull __attr, pid_t __pgroup) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -070085#endif
86
87#if __BIONIC_AVAILABILITY_GUARD(28)
zijunzhao8f23da62023-03-31 06:08:20 +000088int posix_spawnattr_getpgroup(const posix_spawnattr_t _Nonnull * _Nonnull __attr, pid_t* _Nonnull __pgroup) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -070089#endif
Elliott Hughes14e3ff92017-10-06 16:58:36 -070090
Elliott Hughesc0f84c92025-04-09 06:24:03 -070091#if __BIONIC_AVAILABILITY_GUARD(28)
zijunzhao8f23da62023-03-31 06:08:20 +000092int posix_spawnattr_setsigmask(posix_spawnattr_t _Nonnull * _Nonnull __attr, const sigset_t* _Nonnull __mask) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -070093#endif
94
95#if __BIONIC_AVAILABILITY_GUARD(28)
zijunzhao8f23da62023-03-31 06:08:20 +000096int posix_spawnattr_setsigmask64(posix_spawnattr_t _Nonnull * _Nonnull __attr, const sigset64_t* _Nonnull __mask) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -070097#endif
98
99#if __BIONIC_AVAILABILITY_GUARD(28)
zijunzhao8f23da62023-03-31 06:08:20 +0000100int posix_spawnattr_getsigmask(const posix_spawnattr_t _Nonnull * _Nonnull __attr, sigset_t* _Nonnull __mask) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -0700101#endif
102
103#if __BIONIC_AVAILABILITY_GUARD(28)
zijunzhao8f23da62023-03-31 06:08:20 +0000104int posix_spawnattr_getsigmask64(const posix_spawnattr_t _Nonnull * _Nonnull __attr, sigset64_t* _Nonnull __mask) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -0700105#endif
Elliott Hughes14e3ff92017-10-06 16:58:36 -0700106
Elliott Hughesc0f84c92025-04-09 06:24:03 -0700107#if __BIONIC_AVAILABILITY_GUARD(28)
zijunzhao8f23da62023-03-31 06:08:20 +0000108int posix_spawnattr_setsigdefault(posix_spawnattr_t _Nonnull * _Nonnull __attr, const sigset_t* _Nonnull __mask) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -0700109#endif
110
111#if __BIONIC_AVAILABILITY_GUARD(28)
zijunzhao8f23da62023-03-31 06:08:20 +0000112int posix_spawnattr_setsigdefault64(posix_spawnattr_t _Nonnull * _Nonnull __attr, const sigset64_t* _Nonnull __mask) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -0700113#endif
114
115#if __BIONIC_AVAILABILITY_GUARD(28)
zijunzhao8f23da62023-03-31 06:08:20 +0000116int posix_spawnattr_getsigdefault(const posix_spawnattr_t _Nonnull * _Nonnull __attr, sigset_t* _Nonnull __mask) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -0700117#endif
118
119#if __BIONIC_AVAILABILITY_GUARD(28)
zijunzhao8f23da62023-03-31 06:08:20 +0000120int posix_spawnattr_getsigdefault64(const posix_spawnattr_t _Nonnull * _Nonnull __attr, sigset64_t* _Nonnull __mask) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -0700121#endif
Elliott Hughes14e3ff92017-10-06 16:58:36 -0700122
Elliott Hughesc0f84c92025-04-09 06:24:03 -0700123#if __BIONIC_AVAILABILITY_GUARD(28)
zijunzhao8f23da62023-03-31 06:08:20 +0000124int posix_spawnattr_setschedparam(posix_spawnattr_t _Nonnull * _Nonnull __attr, const struct sched_param* _Nonnull __param) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -0700125#endif
126
127#if __BIONIC_AVAILABILITY_GUARD(28)
zijunzhao8f23da62023-03-31 06:08:20 +0000128int posix_spawnattr_getschedparam(const posix_spawnattr_t _Nonnull * _Nonnull __attr, struct sched_param* _Nonnull __param) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -0700129#endif
Elliott Hughes14e3ff92017-10-06 16:58:36 -0700130
Elliott Hughesc0f84c92025-04-09 06:24:03 -0700131#if __BIONIC_AVAILABILITY_GUARD(28)
zijunzhao8f23da62023-03-31 06:08:20 +0000132int posix_spawnattr_setschedpolicy(posix_spawnattr_t _Nonnull * _Nonnull __attr, int __policy) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -0700133#endif
134
135#if __BIONIC_AVAILABILITY_GUARD(28)
zijunzhao8f23da62023-03-31 06:08:20 +0000136int posix_spawnattr_getschedpolicy(const posix_spawnattr_t _Nonnull * _Nonnull __attr, int* _Nonnull __policy) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -0700137#endif
Elliott Hughes14e3ff92017-10-06 16:58:36 -0700138
Elliott Hughesc0f84c92025-04-09 06:24:03 -0700139#if __BIONIC_AVAILABILITY_GUARD(28)
zijunzhao8f23da62023-03-31 06:08:20 +0000140int posix_spawn_file_actions_init(posix_spawn_file_actions_t _Nonnull * _Nonnull __actions) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -0700141#endif
142
143#if __BIONIC_AVAILABILITY_GUARD(28)
zijunzhao8f23da62023-03-31 06:08:20 +0000144int posix_spawn_file_actions_destroy(posix_spawn_file_actions_t _Nonnull * _Nonnull __actions) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -0700145#endif
Elliott Hughes14e3ff92017-10-06 16:58:36 -0700146
Elliott Hughesc0f84c92025-04-09 06:24:03 -0700147#if __BIONIC_AVAILABILITY_GUARD(28)
zijunzhao8f23da62023-03-31 06:08:20 +0000148int posix_spawn_file_actions_addopen(posix_spawn_file_actions_t _Nonnull * _Nonnull __actions, int __fd, const char* _Nonnull __path, int __flags, mode_t __mode) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -0700149#endif
150
151#if __BIONIC_AVAILABILITY_GUARD(28)
zijunzhao8f23da62023-03-31 06:08:20 +0000152int posix_spawn_file_actions_addclose(posix_spawn_file_actions_t _Nonnull * _Nonnull __actions, int __fd) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -0700153#endif
154
155#if __BIONIC_AVAILABILITY_GUARD(28)
zijunzhao8f23da62023-03-31 06:08:20 +0000156int posix_spawn_file_actions_adddup2(posix_spawn_file_actions_t _Nonnull * _Nonnull __actions, int __fd, int __new_fd) __INTRODUCED_IN(28);
Elliott Hughesc0f84c92025-04-09 06:24:03 -0700157#endif
Dan Albert02ce4012024-10-25 19:13:49 +0000158
Elliott Hughes480a70a2025-04-10 12:34:04 -0400159/** Synonym for posix_spawn_file_actions_addchdir(). */
Dan Albert02ce4012024-10-25 19:13:49 +0000160#if __BIONIC_AVAILABILITY_GUARD(34)
Elliott Hughes462ca8b2023-04-04 13:33:28 -0700161int posix_spawn_file_actions_addchdir_np(posix_spawn_file_actions_t _Nonnull * _Nonnull __actions, const char* _Nonnull __path) __INTRODUCED_IN(34);
Elliott Hughesc0f84c92025-04-09 06:24:03 -0700162#endif
Dan Albert02ce4012024-10-25 19:13:49 +0000163
Elliott Hughes480a70a2025-04-10 12:34:04 -0400164/**
165 * posix_spawn_file_actions_addchdir() adds a chdir() as an action
166 * to be performed between the fork() and exec().
167 *
168 * Returns 0 on success and returns an error number on failure.
169 */
170#if __BIONIC_AVAILABILITY_GUARD(34)
171int posix_spawn_file_actions_addchdir(posix_spawn_file_actions_t _Nonnull * _Nonnull __actions, const char* _Nonnull __path) __INTRODUCED_IN(34) __RENAME(posix_spawn_file_actions_addchdir_np);
172#endif
173
174/** Synonym for posix_spawn_file_actions_addfchdir(). */
Elliott Hughesc0f84c92025-04-09 06:24:03 -0700175#if __BIONIC_AVAILABILITY_GUARD(34)
176int posix_spawn_file_actions_addfchdir_np(posix_spawn_file_actions_t _Nonnull * _Nonnull __actions, int __fd) __INTRODUCED_IN(34);
177#endif
Elliott Hughes462ca8b2023-04-04 13:33:28 -0700178
Elliott Hughes480a70a2025-04-10 12:34:04 -0400179/**
180 * posix_spawn_file_actions_addfchdir() adds an fchdir() as an action
181 * to be performed between the fork() and exec().
182 *
183 * Returns 0 on success and returns an error number on failure.
184 */
185#if __BIONIC_AVAILABILITY_GUARD(34)
186int posix_spawn_file_actions_addfchdir(posix_spawn_file_actions_t _Nonnull * _Nonnull __actions, int __fd) __INTRODUCED_IN(34) __RENAME(posix_spawn_file_actions_addfchdir_np);
187#endif
188
Elliott Hughes14e3ff92017-10-06 16:58:36 -0700189__END_DECLS