1/*
2 * Copyright 2017 Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _SPAWN_H_
6#define _SPAWN_H_
7
8
9#include <sched.h>
10#include <signal.h>
11#include <stdint.h>
12#include <sys/types.h>
13
14
15/*
16 * Flags for spawn attributes.
17 */
18#define POSIX_SPAWN_RESETIDS		0x01
19#define POSIX_SPAWN_SETPGROUP		0x02
20#if 0	/* Unimplemented flags: */
21#define POSIX_SPAWN_SETSCHEDPARAM	0x04
22#define POSIX_SPAWN_SETSCHEDULER	0x08
23#endif	/* 0 */
24#define POSIX_SPAWN_SETSIGDEF		0x10
25#define POSIX_SPAWN_SETSIGMASK		0x20
26#define POSIX_SPAWN_SETSID			0x40
27
28
29typedef struct _posix_spawnattr	*posix_spawnattr_t;
30typedef struct _posix_spawn_file_actions	*posix_spawn_file_actions_t;
31
32
33#ifdef __cplusplus
34extern "C" {
35#endif
36
37
38extern int posix_spawn(pid_t *pid, const char *path,
39	const posix_spawn_file_actions_t *file_actions,
40	const posix_spawnattr_t *attrp, char *const argv[], char *const envp[]);
41extern int posix_spawnp(pid_t *pid, const char *file,
42	const posix_spawn_file_actions_t *file_actions,
43	const posix_spawnattr_t *attrp, char *const argv[],
44	char *const envp[]);
45
46/* file actions functions */
47extern int posix_spawn_file_actions_init(
48	posix_spawn_file_actions_t *file_actions);
49extern int posix_spawn_file_actions_destroy(
50	posix_spawn_file_actions_t *file_actions);
51extern int posix_spawn_file_actions_addopen(
52	posix_spawn_file_actions_t *file_actions,
53	int fildes, const char *path, int oflag, mode_t mode);
54extern int posix_spawn_file_actions_addclose(
55	posix_spawn_file_actions_t *file_actions, int fildes);
56extern int posix_spawn_file_actions_adddup2(
57	posix_spawn_file_actions_t *file_actions, int fildes, int newfildes);
58
59/* spawn attribute functions */
60extern int posix_spawnattr_destroy(posix_spawnattr_t *attr);
61extern int posix_spawnattr_init(posix_spawnattr_t *attr);
62extern int posix_spawnattr_getflags(const posix_spawnattr_t *attr,
63	short *_flags);
64extern int posix_spawnattr_setflags(posix_spawnattr_t *attr, short flags);
65extern int posix_spawnattr_getpgroup(const posix_spawnattr_t *attr,
66	pid_t *_pgroup);
67extern int posix_spawnattr_setpgroup(posix_spawnattr_t *attr, pid_t pgroup);
68extern int posix_spawnattr_getsigdefault(const posix_spawnattr_t *attr,
69	sigset_t *sigdefault);
70extern int posix_spawnattr_setsigdefault(posix_spawnattr_t *attr,
71	const sigset_t *sigdefault);
72extern int posix_spawnattr_getsigmask(const posix_spawnattr_t *attr,
73	sigset_t *_sigmask);
74extern int posix_spawnattr_setsigmask(posix_spawnattr_t *attr,
75	const sigset_t *sigmask);
76
77
78#ifdef __cplusplus
79}
80#endif
81
82
83#endif	/* _SPAWN_H_ */
84
85