From: Johannes Sixt <j6t@kdbg.org>
To: Yongqiang Tian <yqtian668@gmail.com>
Cc: ps@pks.im, l.s.r@web.de, git@vger.kernel.org
Subject: Re: [PATCH v3] compat/winansi: fix die_lasterr() argument formatting
Date: Wed, 23 Sep 2026 06:41:47 +0200 [thread overview]
Message-ID: <3e2befed-355b-4a82-af82-25dedaee0565@kdbg.org> (raw)
In-Reply-To: <20260921234756.77997-1-yqtian668@gmail.com>
Am 22.09.26 um 01:47 schrieb Yongqiang Tian:
> During WinANSI initialization, duplicate_handle() reports the handle
> when DuplicateHandle() fails. die_lasterr() collects the formatting
> arguments in a va_list, but passes that va_list to die_errno() as an
> ordinary variadic argument. die_errno() consequently formats part of
> the va_list representation instead of the supplied handle, producing
> an incorrect fatal message.
>
> The helper also converts GetLastError() to errno, losing the exact
> Windows error code.
>
> Remove die_lasterr() and report GetLastError() directly at its four
> call sites, following the existing Windows diagnostic style. This
> passes the handle to the formatter correctly and preserves the Windows
> error code. Keep the existing %li representation of the handle.
>
> Helped-by: Johannes Sixt <j6t@kdbg.org>
> Helped-by: René Scharfe <l.s.r@web.de>
> Signed-off-by: Yongqiang Tian <yqtian668@gmail.com>
> ---
>
> Changes since v2:
> - Add Helped-by trailers for Johannes Sixt and René Scharfe.
> - Move build validation details below the separator.
> - No code changes.
This round looks very good now. I tested it and it works as desired.
Thanks! FWIW:
Acked-by: Johannes Sixt <j6t@kdbg.org>
>
> Validation (performed for v2; the code is unchanged):
> - Built compat/winansi.o with DEVELOPER=1 using MinGW GCC 13.
> - Built and linked the complete git.exe.
>
> compat/winansi.c | 19 +++++--------------
> 1 file changed, 5 insertions(+), 14 deletions(-)
>
> diff --git a/compat/winansi.c b/compat/winansi.c
> index 3ce1900939..088734a1df 100644
> --- a/compat/winansi.c
> +++ b/compat/winansi.c
> @@ -436,15 +436,6 @@ static void winansi_exit(void)
> CloseHandle(hthread);
> }
>
> -static void die_lasterr(const char *fmt, ...)
> -{
> - va_list params;
> - va_start(params, fmt);
> - errno = err_win_to_posix(GetLastError());
> - die_errno(fmt, params);
> - va_end(params);
> -}
> -
> #undef dup2
> int winansi_dup2(int oldfd, int newfd)
> {
> @@ -462,8 +453,8 @@ static HANDLE duplicate_handle(HANDLE hnd)
> HANDLE hresult, hproc = GetCurrentProcess();
> if (!DuplicateHandle(hproc, hnd, hproc, &hresult, 0, TRUE,
> DUPLICATE_SAME_ACCESS))
> - die_lasterr("DuplicateHandle(%li) failed",
> - (long) (intptr_t) hnd);
> + die("DuplicateHandle(%li) failed: %lu",
> + (long) (intptr_t) hnd, GetLastError());
> return hresult;
> }
>
> @@ -609,16 +600,16 @@ void winansi_init(void)
> hwrite = CreateNamedPipeW(name, PIPE_ACCESS_OUTBOUND,
> PIPE_TYPE_BYTE | PIPE_WAIT, 1, BUFFER_SIZE, 0, 0, NULL);
> if (hwrite == INVALID_HANDLE_VALUE)
> - die_lasterr("CreateNamedPipe failed");
> + die("CreateNamedPipe failed: %lu", GetLastError());
>
> hread = CreateFileW(name, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
> if (hread == INVALID_HANDLE_VALUE)
> - die_lasterr("CreateFile for named pipe failed");
> + die("CreateFile for named pipe failed: %lu", GetLastError());
>
> /* start console spool thread on the pipe's read end */
> hthread = CreateThread(NULL, 0, console_thread, NULL, 0, NULL);
> if (!hthread)
> - die_lasterr("CreateThread(console_thread) failed");
> + die("CreateThread(console_thread) failed: %lu", GetLastError());
>
> /* schedule cleanup routine */
> if (atexit(winansi_exit))
prev parent reply other threads:[~2026-09-23 4:41 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-16 4:23 [PATCH] compat/winansi: fix die_lasterr() argument formatting Yongqiang Tian
2026-09-16 4:29 ` Junio C Hamano
2026-09-16 6:13 ` Johannes Sixt
2026-09-16 6:33 ` René Scharfe
2026-09-16 7:09 ` Johannes Sixt
2026-09-21 3:00 ` Yongqiang Tian
2026-09-21 4:06 ` Johannes Sixt
2026-09-21 6:20 ` [PATCH v2] " Yongqiang Tian
2026-09-21 17:18 ` Junio C Hamano
2026-09-21 23:49 ` Yongqiang Tian
2026-09-21 23:47 ` [PATCH v3] " Yongqiang Tian
2026-09-23 4:41 ` Johannes Sixt [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3e2befed-355b-4a82-af82-25dedaee0565@kdbg.org \
--to=j6t@kdbg.org \
--cc=git@vger.kernel.org \
--cc=l.s.r@web.de \
--cc=ps@pks.im \
--cc=yqtian668@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox