On 12/07/2018 11:56 AM, Mauro Carvalho Chehab wrote: > A common mistake is to assume that initializing a var with: > struct foo f = { 0 }; > > Would initialize a zeroed struct. Actually, what this does is > to initialize the first element of the struct to zero. > > According to C99 Standard 6.7.8.21: > > "If there are fewer initializers in a brace-enclosed > list than there are elements or members of an aggregate, > or fewer characters in a string literal used to initialize > an array of known size than there are elements in the array, > the remainder of the aggregate shall be initialized implicitly > the same as objects that have static storage duration." > > So, in practice, it could zero the entire struct, but, if the > first element is not an integer, it will produce warnings: > > drivers/staging/media/sunxi/cedrus/cedrus.c:drivers/staging/media/sunxi/cedrus/cedrus.c:78:49: warning: Using plain integer as NULL pointer > drivers/staging/media/sunxi/cedrus/cedrus_dec.c:drivers/staging/media/sunxi/cedrus/cedrus_dec.c:29:35: warning: Using plain integer as NULL pointer > > A proper way to initialize it with gcc is to use: > > struct foo f = { }; > > But that seems to be a gcc extension. So, I decided to check upstream No, this is not a gcc extension. It's part of the latest C standard. It's used all over in the kernel, so please use {} instead of { NULL }. Personally I think {} is a fantastic invention and I wish C++ had it as well. Regards, Hans > what's the most commonly pattern. The gcc pattern has about 2000 entries: > > $ git grep -E "=\s*\{\s*\}"|wc -l > 1951 > > The standard-C compliant pattern has about 2500 entries: > > $ git grep -E "=\s*\{\s*NULL\s*\}"|wc -l > 137 > $ git grep -E "=\s*\{\s*0\s*\}"|wc -l > 2323 > > So, let's initialize those structs with: > = { NULL } > > Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@xxxxxxxxxx> > --- > drivers/staging/media/sunxi/cedrus/cedrus.c | 2 +- > drivers/staging/media/sunxi/cedrus/cedrus_dec.c | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/staging/media/sunxi/cedrus/cedrus.c b/drivers/staging/media/sunxi/cedrus/cedrus.c > index b538eb0321d8..44c45c687503 100644 > --- a/drivers/staging/media/sunxi/cedrus/cedrus.c > +++ b/drivers/staging/media/sunxi/cedrus/cedrus.c > @@ -75,7 +75,7 @@ static int cedrus_init_ctrls(struct cedrus_dev *dev, struct cedrus_ctx *ctx) > memset(ctx->ctrls, 0, ctrl_size); > > for (i = 0; i < CEDRUS_CONTROLS_COUNT; i++) { > - struct v4l2_ctrl_config cfg = { 0 }; > + struct v4l2_ctrl_config cfg = { NULL }; > > cfg.elem_size = cedrus_controls[i].elem_size; > cfg.id = cedrus_controls[i].id; > diff --git a/drivers/staging/media/sunxi/cedrus/cedrus_dec.c b/drivers/staging/media/sunxi/cedrus/cedrus_dec.c > index e40180a33951..4099a42dba2d 100644 > --- a/drivers/staging/media/sunxi/cedrus/cedrus_dec.c > +++ b/drivers/staging/media/sunxi/cedrus/cedrus_dec.c > @@ -26,7 +26,7 @@ void cedrus_device_run(void *priv) > { > struct cedrus_ctx *ctx = priv; > struct cedrus_dev *dev = ctx->dev; > - struct cedrus_run run = { 0 }; > + struct cedrus_run run = { NULL }; > struct media_request *src_req; > unsigned long flags; > > _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel