On Wed, Jul 24, 2024 at 11:50:09PM +0200, Stefano
Brivio wrote:
Calling vlogmsg() twice from logmsg_perror()
results in this beauty:
$ ./pasta -i foo
Invalid interface name foo
: No such device
because the first part of the message, corresponding to the first
call, doesn't end with a newline, and vlogmsg() adds it.
Given that we can't easily append an argument (error description) to
a variadic list, add a 'newline' parameter to all the functions that
currently add a newline if missing, and disable that on the first call
to vlogmsg() from logmsg_perror(). Not very pretty but I can't think
of any solution that's less messy than this.
Signed-off-by: Stefano Brivio <sbrivio(a)redhat.com>
I think my personal inclination would be to rename all the
lowest-level functions slightly and remove the newline adding logic
unconditionally. The create wrappers under the old name which add the
"\n". I think that can be done in an easy macro, since the "\n" can
be constant string appended to the format string. Just the special
paths that need to suppress the newline would call the low level "no
newline" variants.
I gave it a try, but the problem is that the "easy macro" needs to be
conditional, depending on whether the newline is there or not: we don't
want to add a newline in case somebody already added it by mistake (or
habit).
That could probably be done as well with an intermediate function, but
it's getting a bit too complicated (at least for me right now).
But, I don't actually care that much so
Reviewed-by: David Gibson <david(a)gibson.dropbear.id.au>
--
Stefano