[SHELL-EXPERIMENTS]

* Sync up to trunk head (r64124).

svn path=/branches/shell-experiments/; revision=64126
This commit is contained in:
Amine Khaldi 2014-09-12 19:21:19 +00:00
commit 18a81d5d1e
480 changed files with 54949 additions and 9004 deletions

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