Hey, On Wed, Feb 13, 2019 at 06:25:24PM +0100, Marc-André Lureau wrote: > Hi > On Wed, Feb 13, 2019 at 6:05 PM Daniel P. Berrangé <[email protected]> > wrote: > > > > This allows the compiler to validate the format string and args passed > > to the function. > > > > Signed-off-by: Daniel P. Berrangé <[email protected]> > > Could we consider the slightly less uglier and foreign > compiler-friendly G_GNUC_PRINTF?
If the format string is passed to a glib function, G_GNUC_PRINTF is
better, for example on Windows, glib G_GNUC_PRINTF changed from
format(printf) to format(gnu_printf) which gives different warnings for
some of the % formatters. Using G_GNUC_PRINTF will give us better
consistency in these warnings.
Christophe
>
>
> > ---
> > src/virt-viewer-app.c | 38 +++++++++++++++++++++++---------------
> > src/virt-viewer-notebook.c | 4 ++--
> > 2 files changed, 25 insertions(+), 17 deletions(-)
> >
> > diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c
> > index fd48014..03a7c00 100644
> > --- a/src/virt-viewer-app.c
> > +++ b/src/virt-viewer-app.c
> > @@ -197,19 +197,16 @@ virt_viewer_app_set_debug(gboolean debug)
> > doDebug = debug;
> > }
> >
> > -static GtkWidget*
> > -virt_viewer_app_make_message_dialog(VirtViewerApp *self,
> > - const char *fmt, ...)
> > +__attribute__((format(gnu_printf, 2, 0))) static GtkWidget*
> > +virt_viewer_app_make_message_dialogv(VirtViewerApp *self,
> > + const char *fmt, va_list vargs)
> > {
> > g_return_val_if_fail(VIRT_VIEWER_IS_APP(self), NULL);
> > GtkWindow *window =
> > GTK_WINDOW(virt_viewer_window_get_window(self->priv->main_window));
> > GtkWidget *dialog;
> > char *msg;
> > - va_list vargs;
> >
> > - va_start(vargs, fmt);
> > msg = g_strdup_vprintf(fmt, vargs);
> > - va_end(vargs);
> >
> > dialog = gtk_message_dialog_new(window,
> > GTK_DIALOG_MODAL |
> > @@ -224,23 +221,34 @@ virt_viewer_app_make_message_dialog(VirtViewerApp
> > *self,
> > return dialog;
> > }
> >
> > -void
> > +__attribute__((format(gnu_printf, 2, 3))) static GtkWidget*
> > +virt_viewer_app_make_message_dialog(VirtViewerApp *self,
> > + const char *fmt, ...)
> > +{
> > + g_return_val_if_fail(VIRT_VIEWER_IS_APP(self), NULL);
> > + GtkWidget *dialog;
> > + va_list vargs;
> > +
> > + va_start(vargs, fmt);
> > + dialog = virt_viewer_app_make_message_dialogv(self, fmt, vargs);
> > + va_end(vargs);
> > +
> > + return dialog;
> > +}
> > +
> > +__attribute__((format(gnu_printf, 2, 3))) void
> > virt_viewer_app_simple_message_dialog(VirtViewerApp *self,
> > const char *fmt, ...)
> > {
> > GtkWidget *dialog;
> > - char *msg;
> > va_list vargs;
> >
> > va_start(vargs, fmt);
> > - msg = g_strdup_vprintf(fmt, vargs);
> > + dialog = virt_viewer_app_make_message_dialogv(self, fmt, vargs);
> > va_end(vargs);
> >
> > - dialog = virt_viewer_app_make_message_dialog(self, msg);
> > gtk_dialog_run(GTK_DIALOG(dialog));
> > gtk_widget_destroy(dialog);
> > -
> > - g_free(msg);
> > }
> >
> > static void
> > @@ -668,7 +676,7 @@ virt_viewer_app_open_unix_sock(const char *unixsock,
> > GError **error)
> >
> > #endif /* defined(HAVE_SOCKETPAIR) && defined(HAVE_FORK) */
> >
> > -void
> > +__attribute__((format(gnu_printf, 2, 3))) void
> > virt_viewer_app_trace(VirtViewerApp *self,
> > const char *fmt, ...)
> > {
> > @@ -1871,7 +1879,7 @@ virt_viewer_app_on_application_startup(GApplication
> > *app)
> >
> > if (!virt_viewer_app_start(self, &error)) {
> > if (error && !g_error_matches(error, VIRT_VIEWER_ERROR,
> > VIRT_VIEWER_ERROR_CANCELLED))
> > - virt_viewer_app_simple_message_dialog(self, error->message);
> > + virt_viewer_app_simple_message_dialog(self, "%s",
> > error->message);
> >
> > g_clear_error(&error);
> > g_application_quit(app);
> > @@ -2477,7 +2485,7 @@ show_status_cb(gpointer value,
> > virt_viewer_notebook_show_status(nb, text);
> > }
> >
> > -void
> > +__attribute__((format(gnu_printf, 2, 3))) void
> > virt_viewer_app_show_status(VirtViewerApp *self, const gchar *fmt, ...)
> > {
> > va_list args;
> > diff --git a/src/virt-viewer-notebook.c b/src/virt-viewer-notebook.c
> > index 3a74e9f..a2092d2 100644
> > --- a/src/virt-viewer-notebook.c
> > +++ b/src/virt-viewer-notebook.c
> > @@ -82,7 +82,7 @@ virt_viewer_notebook_init (VirtViewerNotebook *self)
> > gtk_notebook_append_page(GTK_NOTEBOOK(self), priv->status, NULL);
> > }
> >
> > -void
> > +__attribute__((format(gnu_printf, 2, 0))) void
> > virt_viewer_notebook_show_status_va(VirtViewerNotebook *self, const gchar
> > *fmt, va_list args)
> > {
> > VirtViewerNotebookPrivate *priv;
> > @@ -99,7 +99,7 @@ virt_viewer_notebook_show_status_va(VirtViewerNotebook
> > *self, const gchar *fmt,
> > g_free(text);
> > }
> >
> > -void
> > +__attribute__((format(gnu_printf, 2, 3))) void
> > virt_viewer_notebook_show_status(VirtViewerNotebook *self, const gchar
> > *fmt, ...)
> > {
> > va_list args;
> > --
> > 2.20.1
> >
> > _______________________________________________
> > virt-tools-list mailing list
> > [email protected]
> > https://www.redhat.com/mailman/listinfo/virt-tools-list
>
> _______________________________________________
> virt-tools-list mailing list
> [email protected]
> https://www.redhat.com/mailman/listinfo/virt-tools-list
signature.asc
Description: PGP signature
_______________________________________________ virt-tools-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/virt-tools-list
