Adds quick_exit(3) and at_quick_exit(3) from freebsd

Change-Id: I4fe88abd8f7b8aa45e58aeb2529d59a8d555d338
This commit is contained in:
Dan Albert
2014-04-29 17:49:06 -07:00
parent 85e780d055
commit b8425c549a
5 changed files with 138 additions and 0 deletions

View File

@@ -203,6 +203,52 @@ TEST(stdlib, strtold) {
ASSERT_DOUBLE_EQ(1.23, strtold("1.23", NULL));
}
TEST(stdlib, quick_exit) {
pid_t pid = fork();
ASSERT_NE(-1, pid) << strerror(errno);
if (pid == 0) {
quick_exit(99);
}
int status;
ASSERT_EQ(pid, waitpid(pid, &status, 0));
ASSERT_TRUE(WIFEXITED(status));
ASSERT_EQ(99, WEXITSTATUS(status));
}
static int quick_exit_status = 0;
static void quick_exit_1(void) {
ASSERT_EQ(quick_exit_status, 0);
quick_exit_status = 1;
}
static void quick_exit_2(void) {
ASSERT_EQ(quick_exit_status, 1);
}
static void not_run(void) {
FAIL();
}
TEST(stdlib, at_quick_exit) {
pid_t pid = fork();
ASSERT_NE(-1, pid) << strerror(errno);
if (pid == 0) {
ASSERT_EQ(at_quick_exit(quick_exit_2), 0);
ASSERT_EQ(at_quick_exit(quick_exit_1), 0);
atexit(not_run);
quick_exit(99);
}
int status;
ASSERT_EQ(pid, waitpid(pid, &status, 0));
ASSERT_TRUE(WIFEXITED(status));
ASSERT_EQ(99, WEXITSTATUS(status));
}
TEST(unistd, _Exit) {
int pid = fork();
ASSERT_NE(-1, pid) << strerror(errno);