// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "sandbox/linux/tests/test_utils.h"

#include <errno.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

#include "base/basictypes.h"
#include "base/logging.h"
#include "base/posix/eintr_wrapper.h"

namespace sandbox {

bool TestUtils::CurrentProcessHasChildren() {
  siginfo_t process_info;
  int ret = HANDLE_EINTR(
      waitid(P_ALL, 0, &process_info, WEXITED | WNOHANG | WNOWAIT));
  if (-1 == ret) {
    PCHECK(ECHILD == errno);
    return false;
  } else {
    return true;
  }
}

void TestUtils::HandlePostForkReturn(pid_t pid) {
  const int kChildExitCode = 1;
  if (pid > 0) {
    int status = 0;
    PCHECK(pid == HANDLE_EINTR(waitpid(pid, &status, 0)));
    CHECK(WIFEXITED(status));
    CHECK_EQ(kChildExitCode, WEXITSTATUS(status));
  } else if (pid == 0) {
    _exit(kChildExitCode);
  }
}

}  // namespace sandbox
