[...]
>> +
>> + ret->logInitMessage = true;
>> + ret->f = f;
>> + ret->c = c;
>> + ret->data = data;
>
> From future patches I see this can be a file or syslog fd.
>
> Anyway, because you're relying on the "->c" to be the free function
for
> ->data, perhaps there should be a check above that causes an error if
> "data" was passed as non-NULL, but ->c is NULL; otherwise, in some
> future world someone may begin to leak data unexpectedly.
I think having non-NULL data with NULL free callback in general is a
valid use-case especially if the data is void * and you store integers
in it. Anyway, the problem here are stderr and syslog where you have
NULL in the close callback and a file descriptor in @data for the former
case, which you really do not want to close anyway, and a valid close
callback with NULL @data (syslog keeps the file descriptor private) for
the latter. While I can imagine having a dummy close callback for stderr
which would just return instantly (however I'd rather avoid that), I
really don't want to pass an arbitrary pointer to @data for syslog-based
output just to satisfy ATTRIBUTE_NONNULL(3), even though it would be
ignored by the syslog close callback.
Let me know if I misunderstood your thoughts, I'll continue fixing the
rest of the patches in the meantime.
Yeah - I think I realized this later too (patch 7)... I guess I was
"over"thinking the fd/journalfd usage where we want someone to
"forget"
somehow to free the resource we're about to "steal" and store.
So ignore the whole ATTRIBUTE_NONNULL(3)...
John