xref: /xnu-11215/tests/subsystem_root_path.h (revision bb611c8f)
1 #include <unistd.h>
2 #include <spawn.h>
3 #include <sys/wait.h>
4 
5 #define SUBSYSTEM_ROOT_PATH_KEY "subsystem_root_path"
6 
7 #define HELPER_BEHAVIOR_NOT_SET    "not_set"
8 #define HELPER_BEHAVIOR_SET        "set"
9 #define HELPER_BEHAVIOR_FORK_EXEC  "fork_exec"
10 #define HELPER_BEHAVIOR_SPAWN      "spawn"
11 
12 static int
_spawn_and_wait(char ** args,posix_spawnattr_t * attr)13 _spawn_and_wait(char ** args, posix_spawnattr_t *attr)
14 {
15 	int pid;
16 	int status;
17 
18 	if (posix_spawn(&pid, args[0], NULL, attr, args, NULL)) {
19 		return -1;
20 	}
21 	if (waitpid(pid, &status, 0) < 0) {
22 		return -1;
23 	}
24 
25 	if (WIFEXITED(status) && (WEXITSTATUS(status) == 0)) {
26 		return 0;
27 	}
28 
29 	return -1;
30 }
31