This is the mail archive of the
sid@sources.redhat.com
mailing list for the SID project.
Re: [patch] Add Logging Support for SID Components
Frank Ch. Eigler wrote:
The new version seems to have at least one actual problem though:
the way that the buffer array is managed. Its allocation/deallocation
strategy should be consistent (probably "new char[]" and "delete[] char")
regardless of the availability of the various *sprintf variants. It should
probably not even be in #if/#endif markers. The new code appears to be
able to hit free() even though malloc() was never called.
The piece of information that you're probably missing is that vasprintf
automatically allocates a buffer of the proper size each time it is
called and it uses malloc. Thus free () is only called when using
vasprintf (! HAVE_VSNPRINTF && HAVE_VASPRINTF). Otherwise
(HAVE_VSNPRINTF || ! HAVE_VAPRINTF) a persistent buffer is used which
can be grown if necessary only when vsnprintf is used. I chose to use
new/delete here since I had a choice.
I have reviewed the code again and believe that it is correct. I can get
the call to free() out of #if/#endif if I allocate a buffer everytime
for all alternatives using malloc, but conditional compilation would
still be necessary for the allocations/growth.
Let me know if you feel these changes are necessary.
Thanks,
Dave