On 09/26/22 13:50, Richard W.M. Jones wrote: > On Mon, Sep 26, 2022 at 09:50:48AM +0100, Daniel P. Berrangé wrote: >> On Mon, Sep 26, 2022 at 10:18:06AM +0200, Laszlo Ersek wrote: >>> gcc reports: >>> >>>> gui.c:1795:3: error: missing initializer for field ‘padding’ of >>>> ‘GActionEntry’ {aka ‘const struct _GActionEntry’} >>>> [-Werror=missing-field-initializers] >>>> 1795 | { "shutdown", activate_action, NULL, NULL, NULL }, >>>> >>>> gui.c:1796:3: error: missing initializer for field ‘padding’ of >>>> ‘GActionEntry’ {aka ‘const struct _GActionEntry’} >>>> [-Werror=missing-field-initializers] >>>> 1796 | { "reboot", activate_action, NULL, NULL, NULL }, >>> >>> I've found this only now because: >>> >>> - this is the first time I'm building virt-p2v with GTK3, > > One of the problems of having several different build axes :-(
Interestingly, gtk3-devel had not been installed on my workstation; I don't even remember why I (apparently) only installed gtk2-devel. (And then, and this is subjective of course, I actually think gtk2 looked better. :/) > >>> - the "shutdown_actions" array depends on USE_POPOVERS which depends on >>> GTK3 being selected, >>> >>> - the "missing-field-initializers" warning (treated as an error) has >>> recently been enabled via "-Wextra" in commit 391f9833d398 ("p2v-c.m4: >>> elicit a stricter set of warnings from gcc", 2022-09-23). >>> >>> The C-language documentation for GActionEntry is silent on the "padding" >>> array: >>> >>> https://docs.gtk.org/gio/struct.ActionEntry.html >>> >>> However, the D-language docs expose it: >>> >>> https://api.gtkd.org/gio.c.types.GActionEntry.html >>> >>> Provide the missing field initializer. >>> >>> Signed-off-by: Laszlo Ersek <ler...@redhat.com> >>> --- >>> gui.c | 4 ++-- >>> 1 file changed, 2 insertions(+), 2 deletions(-) >>> >>> diff --git a/gui.c b/gui.c >>> index 49301d9a985b..4faaa710ed90 100644 >>> --- a/gui.c >>> +++ b/gui.c >>> @@ -1792,8 +1792,8 @@ static gboolean close_running_dialog (GtkWidget *w, >>> GdkEvent *event, gpointer da >>> >>> #ifdef USE_POPOVERS >>> static const GActionEntry shutdown_actions[] = { >>> - { "shutdown", activate_action, NULL, NULL, NULL }, >>> - { "reboot", activate_action, NULL, NULL, NULL }, >>> + { "shutdown", activate_action, NULL, NULL, NULL, { 0 } }, >>> + { "reboot", activate_action, NULL, NULL, NULL, { 0 } }, >>> }; >> >> Notice the header decl says 'padding' is private hence why it is >> not documented. >> >> struct _GActionEntry >> { >> const gchar *name; >> >> void (* activate) (GSimpleAction *action, >> GVariant *parameter, >> gpointer user_data); >> >> const gchar *parameter_type; >> >> const gchar *state; >> >> void (* change_state) (GSimpleAction *action, >> GVariant *value, >> gpointer user_data); >> >> /*< private >*/ >> gsize padding[3]; >> }; >> >> >> The purpose of this 'padding' entry is to reserve space in the struct >> for future usage. Apps should never touch the padding field, since it >> can change in future. ie that 3 element array can turn into three >> separate public fields later, and then the compound initializer above >> would be invalid. >> >> The right way to declare this is using named initializers: >> >> { .name = "shutdown", .activate = activate_action }, >> { .name = "reboot", .activate = activate_action }, > > Yes I agree, if that shuts up the -Wextra warning. It should; the gcc documentation says about -Wmissing-field-initializers that it does not warn about designated initializers, such as in: struct s { int f, g, h; }; struct s x = { .f = 3, .g = 4 }; Laszlo _______________________________________________ Libguestfs mailing list Libguestfs@redhat.com https://listman.redhat.com/mailman/listinfo/libguestfs