#ifndef SYSROOT_SPAWN_H_
#define SYSROOT_SPAWN_H_

#ifdef __cplusplus
extern "C" {
#endif

#include <features.h>

#define __NEED_mode_t
#define __NEED_pid_t
#define __NEED_sigset_t

#include <bits/alltypes.h>

struct sched_param;

#define POSIX_SPAWN_RESETIDS 1
#define POSIX_SPAWN_SETPGROUP 2
#define POSIX_SPAWN_SETSIGDEF 4
#define POSIX_SPAWN_SETSIGMASK 8
#define POSIX_SPAWN_SETSCHEDPARAM 16
#define POSIX_SPAWN_SETSCHEDULER 32

typedef struct {
    int __flags;
    pid_t __pgrp;
    sigset_t __def, __mask;
    int __prio, __pol, __pad[16];
} posix_spawnattr_t;

typedef struct {
    int __pad0[2];
    void* __actions;
    int __pad[16];
} posix_spawn_file_actions_t;

int posix_spawn(pid_t* __restrict, const char* __restrict, const posix_spawn_file_actions_t*,
                const posix_spawnattr_t* __restrict, char* const* __restrict,
                char* const* __restrict);
int posix_spawnp(pid_t* __restrict, const char* __restrict, const posix_spawn_file_actions_t*,
                 const posix_spawnattr_t* __restrict, char* const* __restrict,
                 char* const* __restrict);

int posix_spawnattr_init(posix_spawnattr_t*);
int posix_spawnattr_destroy(posix_spawnattr_t*);

int posix_spawnattr_setflags(posix_spawnattr_t*, short);
int posix_spawnattr_getflags(const posix_spawnattr_t* __restrict, short* __restrict);

int posix_spawnattr_setpgroup(posix_spawnattr_t*, pid_t);
int posix_spawnattr_getpgroup(const posix_spawnattr_t* __restrict, pid_t* __restrict);

int posix_spawnattr_setsigmask(posix_spawnattr_t* __restrict, const sigset_t* __restrict);
int posix_spawnattr_getsigmask(const posix_spawnattr_t* __restrict, sigset_t* __restrict);

int posix_spawnattr_setsigdefault(posix_spawnattr_t* __restrict, const sigset_t* __restrict);
int posix_spawnattr_getsigdefault(const posix_spawnattr_t* __restrict, sigset_t* __restrict);

int posix_spawnattr_setschedparam(posix_spawnattr_t* __restrict,
                                  const struct sched_param* __restrict);
int posix_spawnattr_getschedparam(const posix_spawnattr_t* __restrict,
                                  struct sched_param* __restrict);
int posix_spawnattr_setschedpolicy(posix_spawnattr_t*, int);
int posix_spawnattr_getschedpolicy(const posix_spawnattr_t* __restrict, int* __restrict);

int posix_spawn_file_actions_init(posix_spawn_file_actions_t*);
int posix_spawn_file_actions_destroy(posix_spawn_file_actions_t*);

int posix_spawn_file_actions_addopen(posix_spawn_file_actions_t* __restrict, int,
                                     const char* __restrict, int, mode_t);
int posix_spawn_file_actions_addclose(posix_spawn_file_actions_t*, int);
int posix_spawn_file_actions_adddup2(posix_spawn_file_actions_t*, int, int);

#ifdef __cplusplus
}
#endif

#endif // SYSROOT_SPAWN_H_
