* Use Wine's _pclose(). Fixes msvcrt:misc crash.
CORE-8080

svn path=/trunk/; revision=64035
This commit is contained in:
Amine Khaldi 2014-09-04 13:39:51 +00:00
parent 1b538306e3
commit 489a69fa41

View file

@ -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<popen_handles_size; i++)
{
if (popen_handles[i].f == file)
break;
}
if(i == popen_handles_size)
{
_munlock(_POPEN_LOCK);
*_errno() = EBADF;
return -1;
}
h = popen_handles[i].proc;
popen_handles[i].f = NULL;
_munlock(_POPEN_LOCK);
fclose(file);
if(WaitForSingleObject(h, INFINITE)==WAIT_FAILED || !GetExitCodeProcess(h, &i))
{
_dosmaperr(GetLastError());
CloseHandle(h);
return -1;
}
CloseHandle(h);
return i;
}
#endif