[libvirt] [PATCH] udev: fix crash in libudev logging
Ján Tomko
jtomko at redhat.com
Thu Jun 13 12:15:55 UTC 2013
On 06/10/2013 05:05 PM, Guan Nan Ren wrote:
> I have been trying to fix this bug these days, but I failed to find a good way
> to bypass the warning you mentioned above caused by a gcc bug:
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28492
>
> I can not find a better way than the casting in your code to compress the warning.
> other than this, there are some points needed to pay attention.
> 1, the log string output from udev ends with newline character which we could remove.
Yes that would be nice.
> 2, we can use debug mode for these logs.
Or we could use the message priority libudev gave us.
>
> The following is the code with my code squashed in your casting code to fix this bug
>
> diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
> index 620cd58..dc989e9 100644
> --- a/src/node_device/node_device_udev.c
> +++ b/src/node_device/node_device_udev.c
> @@ -348,15 +348,32 @@ static int udevGenerateDeviceName(struct udev_device *device,
> }
>
>
> -static void udevLogFunction(struct udev *udev ATTRIBUTE_UNUSED,
> - int priority ATTRIBUTE_UNUSED,
> - const char *file,
> - int line,
> - const char *fn,
> - const char *fmt,
> - va_list args)
> +typedef void (*udevLogFunctionPtr)(struct udev *udev,
> + int priority,
> + const char *file,
> + int line,
> + const char *fn,
> + const char *format,
> + va_list args);
> +
> +static void
> +ATTRIBUTE_FMT_PRINTF(6,0)
> +udevLogFunction(struct udev *udev ATTRIBUTE_UNUSED,
> + int priority ATTRIBUTE_UNUSED,
> + const char *file ATTRIBUTE_UNUSED,
> + int line ATTRIBUTE_UNUSED,
> + const char *fn ATTRIBUTE_UNUSED,
You're ignoring priority, file, line and fn. I think those might be useful.
I'll send another version.
> + const char *fmt,
> + va_list args)
> {
> - VIR_ERROR_INT(VIR_LOG_FROM_LIBRARY, file, line, fn, fmt, args);
> + char *eol = NULL;
> + char buffer[LINE_MAX];
> + vsnprintf(buffer, sizeof(buffer), fmt, args);
> +
> + if ((eol = strpbrk(buffer, "\n\r")))
> + *(eol++) = 0;
> +
> + VIR_DEBUG("%s", buffer);
> }
>
Jan
More information about the libvir-list
mailing list