mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-08 16:36:21 +00:00
55 lines
1.2 KiB
C
55 lines
1.2 KiB
C
/* Test that an error from posix_spawn() is correctly propagated to the
|
|
parent. */
|
|
|
|
#include <errno.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <spawn.h>
|
|
|
|
int main(void)
|
|
{
|
|
int res = 1;
|
|
int err;
|
|
posix_spawn_file_actions_t file_actions;
|
|
char *argv_exe[] = {"true", NULL};
|
|
char *envv_exe[] = {NULL};
|
|
|
|
err = posix_spawn_file_actions_init(&file_actions);
|
|
if (err != 0) {
|
|
errno = err;
|
|
perror("posix_spawn_file_actions_init");
|
|
return 1;
|
|
}
|
|
|
|
err = posix_spawn_file_actions_adddup2(&file_actions, 3, 4);
|
|
if (err != 0) {
|
|
errno = err;
|
|
perror("posix_spawn_file_actions_adddup2");
|
|
goto out;
|
|
}
|
|
|
|
/* The following call to posix_spawn() should fail because the requested
|
|
dup2 action cannot be performed. */
|
|
err = posix_spawn(NULL, "/bin/true", &file_actions, NULL, argv_exe,
|
|
envv_exe);
|
|
if (err != 0) {
|
|
errno = err;
|
|
perror("posix_spawn");
|
|
goto out;
|
|
}
|
|
|
|
res = 0;
|
|
|
|
out:
|
|
err = posix_spawn_file_actions_destroy(&file_actions);
|
|
if (err != 0) {
|
|
errno = err;
|
|
perror("posix_spawn_file_actions_destroy");
|
|
res = 1;
|
|
}
|
|
|
|
return res;
|
|
}
|
|
|