On 09/26/22 10:50, 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, >> >> - 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.
Right; I thought we'd just fix it again at that point :) > > The right way to declare this is using named initializers: > > { .name = "shutdown", .activate = activate_action }, > { .name = "reboot", .activate = activate_action }, I wasn't sure if the p2v coding style permitted designated initializers... Now that I'm looking closer, yes, there is "prior art"; in compound literals in "ssh.c". I'll update this patch. Thanks Laszlo _______________________________________________ Libguestfs mailing list Libguestfs@redhat.com https://listman.redhat.com/mailman/listinfo/libguestfs