diff --git a/reactos/lib/sdk/crt/stdio/popen.c b/reactos/lib/sdk/crt/stdio/popen.c index 74f2f0fb601..83d83581091 100644 --- a/reactos/lib/sdk/crt/stdio/popen.c +++ b/reactos/lib/sdk/crt/stdio/popen.c @@ -21,6 +21,14 @@ int alloc_fd(HANDLE hand, int flag); //FIXME: Remove unsigned split_oflags(unsigned oflags); //FIXME: Remove +#ifndef _UNICODE +static struct popen_handle { + FILE *f; + HANDLE proc; +} *popen_handles; +static DWORD popen_handles_size; +#endif + /* * @implemented */ @@ -130,16 +138,40 @@ FILE *_tpopen (const _TCHAR *cm, const _TCHAR *md) /* program name, pipe mode */ /* * @implemented */ -int _pclose (FILE *pp) +int CDECL _pclose(FILE* file) { - TRACE("_pclose(%x)",pp); + HANDLE h; + DWORD i; - fclose(pp); - //if (!TerminateProcess(pp->_tmpfname ,0)) - // return( -1 ); - return( 0 ); + if (!MSVCRT_CHECK_PMT(file != NULL)) return -1; + + _mlock(_POPEN_LOCK); + for(i=0; i