Hi On Wed, Feb 13, 2019 at 6:05 PM Daniel P. Berrangé <berrange@xxxxxxxxxx> wrote: > > This allows the compiler to validate the format string and args passed > to the function. > > Signed-off-by: Daniel P. Berrangé <berrange@xxxxxxxxxx> Could we consider the slightly less uglier and foreign compiler-friendly G_GNUC_PRINTF? > --- > 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 > virt-tools-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/virt-tools-list _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list