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