xref: /reactos/sdk/lib/crt/process/_cwait.c (revision c2c66aff)
1 /*
2  * COPYRIGHT:   See COPYING in the top level directory
3  * PROJECT:     ReactOS system libraries
4  * FILE:        lib/sdk/crt/process/_cwait.c
5  * PURPOSE:     Waits for a process to exit
6  */
7 
8 #include <precomp.h>
9 
10 /* Taken from Wine msvcrt/process.c */
11 
12 /*
13  * @implemented
14  */
_cwait(int * status,intptr_t pid,int action)15 intptr_t CDECL _cwait(int *status, intptr_t pid, int action)
16 {
17   HANDLE hPid = (HANDLE)pid;
18   int doserrno;
19 
20   if (!WaitForSingleObject(hPid, INFINITE))
21   {
22     if (status)
23     {
24       DWORD stat;
25       GetExitCodeProcess(hPid, &stat);
26       *status = (int)stat;
27     }
28     return pid;
29   }
30   doserrno = GetLastError();
31 
32   if (doserrno == ERROR_INVALID_HANDLE)
33   {
34     *_errno() =  ECHILD;
35     *__doserrno() = doserrno;
36   }
37   else
38     _dosmaperr(doserrno);
39 
40   return status ? *status = -1 : -1;
41 }
42