| // 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/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 |