brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.7 KiB · bdd54d4 Raw
61 lines · cpp
1//===-- Unittests for execv -----------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "src/sys/wait/waitpid.h"10#include "src/unistd/execv.h"11#include "src/unistd/fork.h"12 13#include "test/IntegrationTest/test.h"14 15#include <signal.h>16#include <sys/wait.h>17 18void fork_and_execv_normal_exit() {19  pid_t pid = LIBC_NAMESPACE::fork();20  if (pid == 0) {21    const char *path = "libc_execv_test_normal_exit";22    char *const argv[] = {23        const_cast<char *>("execv_test_normal_exit"),24        nullptr,25    };26    LIBC_NAMESPACE::execv(path, argv);27  }28  ASSERT_TRUE(pid > 0);29  int status;30  pid_t cpid = LIBC_NAMESPACE::waitpid(pid, &status, 0);31  ASSERT_TRUE(cpid > 0);32  ASSERT_EQ(cpid, pid);33  ASSERT_TRUE(WIFEXITED(status));34}35 36void fork_and_execv_signal_exit() {37  pid_t pid = LIBC_NAMESPACE::fork();38  if (pid == 0) {39    const char *path = "libc_execv_test_signal_exit";40    char *const argv[] = {41        const_cast<char *>("execv_test_normal_exit"),42        nullptr,43    };44    LIBC_NAMESPACE::execv(path, argv);45  }46  ASSERT_TRUE(pid > 0);47  int status;48  pid_t cpid = LIBC_NAMESPACE::waitpid(pid, &status, 0);49  ASSERT_TRUE(cpid > 0);50  ASSERT_EQ(cpid, pid);51  ASSERT_FALSE(WIFEXITED(status));52  ASSERT_TRUE(WTERMSIG(status) == SIGUSR1);53}54 55TEST_MAIN([[maybe_unused]] int argc, [[maybe_unused]] char **argv,56          [[maybe_unused]] char **envp) {57  fork_and_execv_normal_exit();58  fork_and_execv_signal_exit();59  return 0;60}61