1 #include "tls_test_frame.h"
2
3 /* Call external program without output redirecting. */
tls_test_launch_external_test_process(INT * exit_status_ptr,CHAR * argv[])4 INT tls_test_launch_external_test_process( INT* exit_status_ptr, CHAR* argv[])
5 {
6 /* Validate pointers. */
7 return_value_if_fail( NULL != exit_status_ptr, TLS_TEST_INVALID_POINTER);
8
9 INT status, process_status;
10 pid_t pid;
11
12 pid = fork();
13 return_value_if_fail( -1 != pid, TLS_TEST_SYSTEM_CALL_FAILED);
14
15 if ( 0 == pid)
16 {
17 /* Child process. */
18
19 /* Enable the timer in child process which will not be inherited by forked child process. */
20 INT exec_status = execvp( argv[0], argv);
21 return_value_if_fail( -1 != exec_status, TLS_TEST_SYSTEM_CALL_FAILED);
22 }
23 else
24 {
25 /* Parent process. */
26
27 status = waitpid( pid, &process_status, 0);
28 return_value_if_fail( -1 != status, TLS_TEST_SYSTEM_CALL_FAILED);
29
30 *exit_status_ptr = 0;
31 if ( WIFEXITED( process_status))
32 {
33 *exit_status_ptr = WEXITSTATUS( process_status);
34 }
35 else if ( WIFSIGNALED( process_status))
36 {
37 *exit_status_ptr = -WTERMSIG( process_status);
38 }
39 return TLS_TEST_SUCCESS;
40 }
41 }
42
43