On 08/11/18 17:31, Andrew Cooper wrote:
> On 08/11/18 17:28, Ian Jackson wrote:
>> Andrew Cooper writes ("Re: [Xen-devel] [PATCH v2 01/11] tools/libs/toollog: 
>> Provide a default logger"):
>>> You want something like:
>>>
>>> static xentoollog_logger_stdiostream stdio_logger = {
>>>     .vtable = {
>>>         .vmessage = stdiostream_vmessage,
>>>         .progress = stdiostream_progress,
>>>         .destroy  = 0, /* no-one should destroy this */
>>>     },
>>>     .min_level = XTL_PROGRESS,
>>>     /* for other fields except .f, 0 is good */
>>> };
>>>
>>> static void __attribute__((__constructor__)) init_stdio_logger(void)
>>> {
>>>     stdio_logger.f = stderr;
>>> }
>> Blimey.  Is that portable enough ?
> Should be.  Its how C++ globals work, and it appears that we already use
> it in xc_dom.h for the dombuilder register_{loader,arch_hooks}()
> infrastructure.

Although actually, you can't capture stderr in a variable like this at
all.  freopen() at a later point will close the current FILE object and
create a new one, after which this logger will use-after-free.

~Andrew

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Reply via email to