On Thu, Jan 05, 2023 at 11:09:57AM +0100, Theo Buehler wrote: > On Thu, Jan 05, 2023 at 11:03:04AM +0100, Claudio Jeker wrote: > > gcc4 does not really support C99 initalizers. It works most of the time > > but fails for more complex structs. Just fall back to memset() here. > > deraadt used { {0} } in kr_send_dependon(). Apparently that works. > I really don't understand why we can't use a 24 years old standard.
It is very annoying. Would be nice if our gcc would allow it since c99 initalizers are a good thing. Not sure I like the { { 0 } } fix. Another option is to init a specific value e.g. struct bgpd_addr gateway = { .aid = 0 }; but again this is just an ugly workaround. We could silence the warning in gcc but I'm not a big fan of that since struct bgpd_addr gateway = { 1 }; should get us a warning. gcc fixed this in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64709 but the code was already quite different to what we have. As a third option one could use the C23 struct bgpd_addr gateway = { }; This seems to work with our gcc and llvm. > > -- > > :wq Claudio > > > > Index: kroute.c > > =================================================================== > > RCS file: /cvs/src/usr.sbin/bgpd/kroute.c,v > > retrieving revision 1.303 > > diff -u -p -r1.303 kroute.c > > --- kroute.c 28 Dec 2022 21:30:16 -0000 1.303 > > +++ kroute.c 5 Jan 2023 09:55:39 -0000 > > @@ -2159,10 +2159,12 @@ kroute6_validate(struct kroute6 *kr) > > int > > knexthop_true_nexthop(struct ktable *kt, struct kroute_full *kf) > > { > > - struct bgpd_addr gateway = { 0 }; > > + struct bgpd_addr gateway; > > struct knexthop *kn; > > struct kroute *kr; > > struct kroute6 *kr6; > > + > > + memset(&gateway, 0, sizeof(gateway)); > > > > /* > > * Ignore the nexthop for VPN routes. The gateway is forced > > > -- :wq Claudio