msvcrt: Don't duplicate standard handles during initialization.
This commit is contained in:
parent
ac9ca974e3
commit
f565e4a315
|
@ -486,53 +486,21 @@ void msvcrt_init_io(void)
|
||||||
if (msvcrt_get_ioinfo(MSVCRT_fdstart)->handle == INVALID_HANDLE_VALUE) break;
|
if (msvcrt_get_ioinfo(MSVCRT_fdstart)->handle == INVALID_HANDLE_VALUE) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!MSVCRT___pioinfo[0])
|
fdinfo = msvcrt_get_ioinfo(MSVCRT_STDIN_FILENO);
|
||||||
msvcrt_alloc_fd_from(INVALID_HANDLE_VALUE, 0, 3);
|
|
||||||
|
|
||||||
fdinfo = msvcrt_get_ioinfo(0);
|
|
||||||
if (!(fdinfo->wxflag & WX_OPEN) || fdinfo->handle == INVALID_HANDLE_VALUE)
|
if (!(fdinfo->wxflag & WX_OPEN) || fdinfo->handle == INVALID_HANDLE_VALUE)
|
||||||
{
|
msvcrt_alloc_fd_from(GetStdHandle(STD_INPUT_HANDLE), WX_OPEN|WX_TEXT, MSVCRT_STDIN_FILENO);
|
||||||
HANDLE std = GetStdHandle(STD_INPUT_HANDLE);
|
|
||||||
if (std != INVALID_HANDLE_VALUE && DuplicateHandle(GetCurrentProcess(), std,
|
|
||||||
GetCurrentProcess(), &fdinfo->handle,
|
|
||||||
0, TRUE, DUPLICATE_SAME_ACCESS))
|
|
||||||
fdinfo->wxflag = WX_OPEN | WX_TEXT;
|
|
||||||
fdinfo->lookahead[0] = '\n';
|
|
||||||
fdinfo->lookahead[1] = '\n';
|
|
||||||
fdinfo->lookahead[2] = '\n';
|
|
||||||
fdinfo->exflag = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
fdinfo = msvcrt_get_ioinfo(1);
|
fdinfo = msvcrt_get_ioinfo(MSVCRT_STDOUT_FILENO);
|
||||||
if (!(fdinfo->wxflag & WX_OPEN) || fdinfo->handle == INVALID_HANDLE_VALUE)
|
if (!(fdinfo->wxflag & WX_OPEN) || fdinfo->handle == INVALID_HANDLE_VALUE)
|
||||||
{
|
msvcrt_alloc_fd_from(GetStdHandle(STD_OUTPUT_HANDLE), WX_OPEN|WX_TEXT, MSVCRT_STDOUT_FILENO);
|
||||||
HANDLE std = GetStdHandle(STD_OUTPUT_HANDLE);
|
|
||||||
if (std != INVALID_HANDLE_VALUE && DuplicateHandle(GetCurrentProcess(), std,
|
|
||||||
GetCurrentProcess(), &fdinfo->handle,
|
|
||||||
0, TRUE, DUPLICATE_SAME_ACCESS))
|
|
||||||
fdinfo->wxflag = WX_OPEN | WX_TEXT;
|
|
||||||
fdinfo->lookahead[0] = '\n';
|
|
||||||
fdinfo->lookahead[1] = '\n';
|
|
||||||
fdinfo->lookahead[2] = '\n';
|
|
||||||
fdinfo->exflag = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
fdinfo = msvcrt_get_ioinfo(2);
|
fdinfo = msvcrt_get_ioinfo(MSVCRT_STDERR_FILENO);
|
||||||
if (!(fdinfo->wxflag & WX_OPEN) || fdinfo->handle == INVALID_HANDLE_VALUE)
|
if (!(fdinfo->wxflag & WX_OPEN) || fdinfo->handle == INVALID_HANDLE_VALUE)
|
||||||
{
|
msvcrt_alloc_fd_from(GetStdHandle(STD_ERROR_HANDLE), WX_OPEN|WX_TEXT, MSVCRT_STDERR_FILENO);
|
||||||
HANDLE std = GetStdHandle(STD_ERROR_HANDLE);
|
|
||||||
if (std != INVALID_HANDLE_VALUE && DuplicateHandle(GetCurrentProcess(), std,
|
|
||||||
GetCurrentProcess(), &fdinfo->handle,
|
|
||||||
0, TRUE, DUPLICATE_SAME_ACCESS))
|
|
||||||
fdinfo->wxflag = WX_OPEN | WX_TEXT;
|
|
||||||
fdinfo->lookahead[0] = '\n';
|
|
||||||
fdinfo->lookahead[1] = '\n';
|
|
||||||
fdinfo->lookahead[2] = '\n';
|
|
||||||
fdinfo->exflag = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
TRACE(":handles (%p)(%p)(%p)\n", msvcrt_get_ioinfo(0)->handle,
|
TRACE(":handles (%p)(%p)(%p)\n", msvcrt_get_ioinfo(MSVCRT_STDIN_FILENO)->handle,
|
||||||
msvcrt_get_ioinfo(1)->handle, msvcrt_get_ioinfo(2)->handle);
|
msvcrt_get_ioinfo(MSVCRT_STDOUT_FILENO)->handle,
|
||||||
|
msvcrt_get_ioinfo(MSVCRT_STDERR_FILENO)->handle);
|
||||||
|
|
||||||
memset(MSVCRT__iob,0,3*sizeof(MSVCRT_FILE));
|
memset(MSVCRT__iob,0,3*sizeof(MSVCRT_FILE));
|
||||||
for (i = 0; i < 3; i++)
|
for (i = 0; i < 3; i++)
|
||||||
|
|
Loading…
Reference in New Issue