On Tue, Sep 27, 2022 at 04:42:00PM +0200, Laszlo Ersek wrote: > 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".
As the most prolific recent contributor the coding style is roughly whatever you say at this point :-) Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-builder quickly builds VMs from scratch http://libguestfs.org/virt-builder.1.html _______________________________________________ Libguestfs mailing list Libguestfs@redhat.com https://listman.redhat.com/mailman/listinfo/libguestfs