On 10/13/25 13:16, Bryan Green wrote:
> On 10/13/25 13:01, Tom Lane wrote:
>> Bryan Green <dbryan(dot)green(at)gmail(dot)com> 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.