From: Paul Gofman <pgofman@codeweavers.com> --- dlls/msvcrt/file.c | 11 +++++++---- dlls/msvcrt/tests/file.c | 5 +++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c index 989755f3ec5..2fd300f0e7d 100644 --- a/dlls/msvcrt/file.c +++ b/dlls/msvcrt/file.c @@ -574,7 +574,7 @@ static void msvcrt_free_fd(int fd) release_ioinfo(fdinfo); } -static void msvcrt_set_fd(ioinfo *fdinfo, HANDLE hand, int flag) +static void msvcrt_set_fd_no_std_update(ioinfo *fdinfo, HANDLE hand, int flag) { fdinfo->handle = hand; fdinfo->wxflag = WX_OPEN | (flag & (WX_DONTINHERIT | WX_APPEND | WX_TEXT | WX_PIPE | WX_TTY)); @@ -583,7 +583,11 @@ static void msvcrt_set_fd(ioinfo *fdinfo, HANDLE hand, int flag) fdinfo->lookahead[2] = '\n'; ioinfo_set_unicode(fdinfo, FALSE); ioinfo_set_textmode(fdinfo, TEXTMODE_ANSI); +} +static void msvcrt_set_fd(ioinfo *fdinfo, HANDLE hand, int flag) +{ + msvcrt_set_fd_no_std_update(fdinfo, hand, flag); if (hand != MSVCRT_NO_CONSOLE) { switch (fdinfo-MSVCRT___pioinfo[0]) @@ -594,7 +598,6 @@ static void msvcrt_set_fd(ioinfo *fdinfo, HANDLE hand, int flag) } } } - /* INTERNAL: Allocate an fd slot from a Win32 HANDLE */ static int msvcrt_alloc_fd(HANDLE hand, int flag) { @@ -764,7 +767,7 @@ void msvcrt_init_io(void) } else if ((type & 0xf) == FILE_TYPE_PIPE) { flags |= WX_PIPE; } - msvcrt_set_fd(fdinfo, h, flags); + msvcrt_set_fd_no_std_update(fdinfo, h, flags); release_ioinfo(fdinfo); } @@ -774,7 +777,7 @@ void msvcrt_init_io(void) { fdinfo = get_ioinfo_alloc_fd(i); if (fdinfo != &MSVCRT___badioinfo) - msvcrt_set_fd(fdinfo, handle_ptr[i], wxflag_ptr[i]); + msvcrt_set_fd_no_std_update(fdinfo, handle_ptr[i], wxflag_ptr[i]); release_ioinfo(fdinfo); } } diff --git a/dlls/msvcrt/tests/file.c b/dlls/msvcrt/tests/file.c index 0ffe82cf667..aabd5fb49e6 100644 --- a/dlls/msvcrt/tests/file.c +++ b/dlls/msvcrt/tests/file.c @@ -1656,6 +1656,11 @@ static void test_file_inherit_child(const char* fd_s, const char *mode_str, cons { handle = (HANDLE)_get_osfhandle(fd); ok(handle == handle_value, "got %p, %p.\n", handle, handle_value); + if (fd == 1) + { + handle = GetStdHandle(STD_OUTPUT_HANDLE); + ok(handle != handle_value, "got equal handles %p.\n", handle); + } } } mode = _setmode(fd, _O_BINARY); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11710