On Tue, 2012-10-23 at 16:57 -0300, Ezequiel Garcia wrote: > This kind of memcpy() is error-prone. Its replacement with a struct > assignment is prefered because it's type-safe and much easier to read. > > Found by coccinelle. Hand patched and reviewed. > Tested by compilation only. > > A simplified version of the semantic match that finds this problem is as > follows: (http://coccinelle.lip6.fr/) > > // <smpl> > @@ > identifier struct_name; > struct struct_name to; > struct struct_name from; > expression E; > @@ > -memcpy(&(to), &(from), E); > +to = from; > // </smpl> > > Cc: Andy Walls <awalls@xxxxxxxxxxxxxxxx> Signed-off-by: Andy Walls <awalls@xxxxxxxxxxxxxxxx> > Signed-off-by: Peter Senna Tschudin <peter.senna@xxxxxxxxx> > Signed-off-by: Ezequiel Garcia <elezegarcia@xxxxxxxxx> > --- > drivers/media/pci/cx18/cx18-i2c.c | 6 ++---- > 1 files changed, 2 insertions(+), 4 deletions(-) > > diff --git a/drivers/media/pci/cx18/cx18-i2c.c b/drivers/media/pci/cx18/cx18-i2c.c > index 51609d5..930d40f 100644 > --- a/drivers/media/pci/cx18/cx18-i2c.c > +++ b/drivers/media/pci/cx18/cx18-i2c.c > @@ -240,15 +240,13 @@ int init_cx18_i2c(struct cx18 *cx) > > for (i = 0; i < 2; i++) { > /* Setup algorithm for adapter */ > - memcpy(&cx->i2c_algo[i], &cx18_i2c_algo_template, > - sizeof(struct i2c_algo_bit_data)); > + cx->i2c_algo[i] = cx18_i2c_algo_template; > cx->i2c_algo_cb_data[i].cx = cx; > cx->i2c_algo_cb_data[i].bus_index = i; > cx->i2c_algo[i].data = &cx->i2c_algo_cb_data[i]; > > /* Setup adapter */ > - memcpy(&cx->i2c_adap[i], &cx18_i2c_adap_template, > - sizeof(struct i2c_adapter)); > + cx->i2c_adap[i] = cx18_i2c_adap_template; > cx->i2c_adap[i].algo_data = &cx->i2c_algo[i]; > sprintf(cx->i2c_adap[i].name + strlen(cx->i2c_adap[i].name), > " #%d-%d", cx->instance, i); -- To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html