On 10/13/25 13:16, Bryan Green wrote:
On 10/13/25 13:01, Tom Lane wrote:
Bryan Green <[email protected]> writes:
On 10/13/25 10:48, Tom Lane wrote:
Huh, that certainly appears broken, but isn't the non-FRONTEND
case equally broken? write_stderr() doesn't expect a va_list
either. I wonder if this code is ever reached at all.
I found two instances of write_stderr(), one in elog.c and another in
pg_ctl.c.
They both use functions that correctly handle the va_list-- either
vsnprintf or vfprintf.
It's the one in elog.c that the non-FRONTEND case is going to invoke.
But I think you're mistaken that it'll "just work". write_stderr()
is creating its own va_list.
We probably need to invent vwrite_stderr().
regards, tom lane
Oh, yes, I see it now. I will create the vwrite_stderr()-- probably
something like below, and then create a new patch.
void
vwrite_stderr(const char *fmt, va_list ap)
{
#ifdef WIN32
char errbuf[2048];
#endif
fmt = _(fmt);
#ifndef WIN32
vfprintf(stderr, fmt, ap);
fflush(stderr);
#else
vsnprintf(errbuf, sizeof(errbuf), fmt, ap);
if (pgwin32_is_service())
write_eventlog(ERROR, errbuf, strlen(errbuf));
else
{
write_console(errbuf, strlen(errbuf));
fflush(stderr);
}
#endif
}
Thanks,
Bryan Green
I mistakenly just hit reply instead of reply all. Apologies for the
clutter.