On Wed, 30 Dec 2009, Németh Márton wrote:

> Julia Lawall wrote:
> > I guess you could do something more general, by first finding types that 
> > have constant fields?
> 
> Well, maybe. The first thing is that the SmPL below is not the exact
> one I wanted to create. This is because of my limited knowledge and
> experience on SmPL. The sd_desc is really a fixed structure name and
> not an identifier. Anyway, this is not really required for the general
> solution.
> 
> The second thing is that most of the time when a driver initializes
> a constant field then constant content is suitable. There are, however,
> some drivers which do some tricks by creating or modifying some fields
> during runtime. In such cases changing the initializer may brake the
> driver but such cases are really exceptions, this is not the usual way.
> 
> Thirdly to find structures with constant fields the header files has
> to be processed. I know that there is the '-local_includes' option of
> the spatch tool but I am not sure that this would be enough for processing
> the Linux kernel tree.

Coccinelle has a default strategy for including some .h files.  For 
example if the file being processed is foo.c, then it will include any 
foo.h that it finds.  If you givethe option -all_includes, then it will 
inlude everything that is explicitly mentioned in the file, as long as it 
can find it.  You can give a search path with -I, but unfortunately only 
one.  If you run spatch on a directory, then -I will be implicitly set to 
directory/include, although if you give a -I option then it will override 
that.

julia

> Regards,
> 
>       Márton Németh
> 
> > On Tue, 29 Dec 2009, Németh Márton wrote:
> > 
> >> From: Márton Németh <[email protected]>
> >>
> >> The ctrls field of struct sd_desc is declared as const
> >> in gspca.h. It is worth to initialize the content also with
> >> constant values.
> >>
> >> The semantic match that finds this kind of pattern is as follows:
> >> (http://coccinelle.lip6.fr/)
> >>
> >> // <smpl>
> >> @m@
> >> identifier x;
> >> identifier y;
> >> identifier sd_desc;
> >> @@
> >>    static struct x sd_desc = {
> >>            ...
> >>            .ctrls = y,
> >>            ...
> >>    };
> >> @c depends on m@
> >> identifier m.y;
> >> identifier ctrl;
> >> @@
> >>    static const struct ctrl y[] = ...;
> >> @depends on m && !c@
> >> identifier m.y;
> >> identifier ctrl;
> >> @@
> >>    static
> >> +  const
> >>    struct ctrl y[] = ...;
> >> // </smpl>
> >>
> >> Signed-off-by: Márton Németh <[email protected]>
> >> Cc: [email protected]
> >> ---
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/benq.c
> >> --- a/linux/drivers/media/video/gspca/benq.c       Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/benq.c       Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -32,7 +32,7 @@
> >>  };
> >>
> >>  /* V4L2 controls supported by the driver */
> >> -static struct ctrl sd_ctrls[] = {
> >> +static const struct ctrl sd_ctrls[] = {
> >>  };
> >>
> >>  static const struct v4l2_pix_format vga_mode[] = {
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/conex.c
> >> --- a/linux/drivers/media/video/gspca/conex.c      Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/conex.c      Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -52,7 +52,7 @@
> >>  static int sd_setcolors(struct gspca_dev *gspca_dev, __s32 val);
> >>  static int sd_getcolors(struct gspca_dev *gspca_dev, __s32 *val);
> >>
> >> -static struct ctrl sd_ctrls[] = {
> >> +static const struct ctrl sd_ctrls[] = {
> >>    {
> >>        {
> >>            .id      = V4L2_CID_BRIGHTNESS,
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/etoms.c
> >> --- a/linux/drivers/media/video/gspca/etoms.c      Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/etoms.c      Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -52,7 +52,7 @@
> >>  static int sd_setautogain(struct gspca_dev *gspca_dev, __s32 val);
> >>  static int sd_getautogain(struct gspca_dev *gspca_dev, __s32 *val);
> >>
> >> -static struct ctrl sd_ctrls[] = {
> >> +static const struct ctrl sd_ctrls[] = {
> >>    {
> >>     {
> >>      .id = V4L2_CID_BRIGHTNESS,
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/mars.c
> >> --- a/linux/drivers/media/video/gspca/mars.c       Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/mars.c       Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -54,7 +54,7 @@
> >>  static int sd_setsharpness(struct gspca_dev *gspca_dev, __s32 val);
> >>  static int sd_getsharpness(struct gspca_dev *gspca_dev, __s32 *val);
> >>
> >> -static struct ctrl sd_ctrls[] = {
> >> +static const struct ctrl sd_ctrls[] = {
> >>    {
> >>        {
> >>            .id      = V4L2_CID_BRIGHTNESS,
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/mr97310a.c
> >> --- a/linux/drivers/media/video/gspca/mr97310a.c   Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/mr97310a.c   Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -107,7 +107,7 @@
> >>  static void setgain(struct gspca_dev *gspca_dev);
> >>
> >>  /* V4L2 controls supported by the driver */
> >> -static struct ctrl sd_ctrls[] = {
> >> +static const struct ctrl sd_ctrls[] = {
> >>  /* Separate brightness control description for Argus QuickClix as it has
> >>     different limits from the other mr97310a cameras */
> >>    {
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/ov534.c
> >> --- a/linux/drivers/media/video/gspca/ov534.c      Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/ov534.c      Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -106,7 +106,7 @@
> >>  static int sd_setfreq(struct gspca_dev *gspca_dev, __s32 val);
> >>  static int sd_getfreq(struct gspca_dev *gspca_dev, __s32 *val);
> >>
> >> -static struct ctrl sd_ctrls_ov772x[] = {
> >> +static const struct ctrl sd_ctrls_ov772x[] = {
> >>      {                                                     /* 0 */
> >>    {
> >>            .id      = V4L2_CID_BRIGHTNESS,
> >> @@ -277,7 +277,7 @@
> >>    .get = sd_getvflip,
> >>      },
> >>  };
> >> -static struct ctrl sd_ctrls_ov965x[] = {
> >> +static const struct ctrl sd_ctrls_ov965x[] = {
> >>      {                                                     /* 0 */
> >>    {
> >>            .id      = V4L2_CID_BRIGHTNESS,
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/pac207.c
> >> --- a/linux/drivers/media/video/gspca/pac207.c     Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/pac207.c     Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -77,7 +77,7 @@
> >>  static int sd_setgain(struct gspca_dev *gspca_dev, __s32 val);
> >>  static int sd_getgain(struct gspca_dev *gspca_dev, __s32 *val);
> >>
> >> -static struct ctrl sd_ctrls[] = {
> >> +static const struct ctrl sd_ctrls[] = {
> >>  #define SD_BRIGHTNESS 0
> >>    {
> >>        {
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/pac7302.c
> >> --- a/linux/drivers/media/video/gspca/pac7302.c    Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/pac7302.c    Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -124,7 +124,7 @@
> >>  static int sd_setexposure(struct gspca_dev *gspca_dev, __s32 val);
> >>  static int sd_getexposure(struct gspca_dev *gspca_dev, __s32 *val);
> >>
> >> -static struct ctrl sd_ctrls[] = {
> >> +static const struct ctrl sd_ctrls[] = {
> >>  /* This control is pac7302 only */
> >>    {
> >>        {
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/pac7311.c
> >> --- a/linux/drivers/media/video/gspca/pac7311.c    Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/pac7311.c    Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -88,7 +88,7 @@
> >>  static int sd_setexposure(struct gspca_dev *gspca_dev, __s32 val);
> >>  static int sd_getexposure(struct gspca_dev *gspca_dev, __s32 *val);
> >>
> >> -static struct ctrl sd_ctrls[] = {
> >> +static const struct ctrl sd_ctrls[] = {
> >>  /* This control is for both the 7302 and the 7311 */
> >>    {
> >>        {
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/sn9c20x.c
> >> --- a/linux/drivers/media/video/gspca/sn9c20x.c    Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/sn9c20x.c    Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -131,7 +131,7 @@
> >>  static int sd_setautoexposure(struct gspca_dev *gspca_dev, s32 val);
> >>  static int sd_getautoexposure(struct gspca_dev *gspca_dev, s32 *val);
> >>
> >> -static struct ctrl sd_ctrls[] = {
> >> +static const struct ctrl sd_ctrls[] = {
> >>    {
> >>  #define BRIGHTNESS_IDX 0
> >>        {
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/sonixb.c
> >> --- a/linux/drivers/media/video/gspca/sonixb.c     Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/sonixb.c     Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -145,7 +145,7 @@
> >>  static int sd_setfreq(struct gspca_dev *gspca_dev, __s32 val);
> >>  static int sd_getfreq(struct gspca_dev *gspca_dev, __s32 *val);
> >>
> >> -static struct ctrl sd_ctrls[] = {
> >> +static const struct ctrl sd_ctrls[] = {
> >>  #define BRIGHTNESS_IDX 0
> >>    {
> >>        {
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/sonixj.c
> >> --- a/linux/drivers/media/video/gspca/sonixj.c     Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/sonixj.c     Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -102,7 +102,7 @@
> >>  static int sd_setfreq(struct gspca_dev *gspca_dev, __s32 val);
> >>  static int sd_getfreq(struct gspca_dev *gspca_dev, __s32 *val);
> >>
> >> -static struct ctrl sd_ctrls[] = {
> >> +static const struct ctrl sd_ctrls[] = {
> >>  #define BRIGHTNESS_IDX 0
> >>    {
> >>        {
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/spca500.c
> >> --- a/linux/drivers/media/video/gspca/spca500.c    Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/spca500.c    Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -68,7 +68,7 @@
> >>  static int sd_setcolors(struct gspca_dev *gspca_dev, __s32 val);
> >>  static int sd_getcolors(struct gspca_dev *gspca_dev, __s32 *val);
> >>
> >> -static struct ctrl sd_ctrls[] = {
> >> +static const struct ctrl sd_ctrls[] = {
> >>    {
> >>        {
> >>            .id      = V4L2_CID_BRIGHTNESS,
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/spca501.c
> >> --- a/linux/drivers/media/video/gspca/spca501.c    Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/spca501.c    Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -59,7 +59,7 @@
> >>  static int sd_setred_balance(struct gspca_dev *gspca_dev, __s32 val);
> >>  static int sd_getred_balance(struct gspca_dev *gspca_dev, __s32 *val);
> >>
> >> -static struct ctrl sd_ctrls[] = {
> >> +static const struct ctrl sd_ctrls[] = {
> >>  #define MY_BRIGHTNESS 0
> >>    {
> >>        {
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/spca505.c
> >> --- a/linux/drivers/media/video/gspca/spca505.c    Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/spca505.c    Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -42,7 +42,7 @@
> >>  static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val);
> >>  static int sd_getbrightness(struct gspca_dev *gspca_dev, __s32 *val);
> >>
> >> -static struct ctrl sd_ctrls[] = {
> >> +static const struct ctrl sd_ctrls[] = {
> >>    {
> >>        {
> >>            .id      = V4L2_CID_BRIGHTNESS,
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/spca506.c
> >> --- a/linux/drivers/media/video/gspca/spca506.c    Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/spca506.c    Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -51,7 +51,7 @@
> >>  static int sd_sethue(struct gspca_dev *gspca_dev, __s32 val);
> >>  static int sd_gethue(struct gspca_dev *gspca_dev, __s32 *val);
> >>
> >> -static struct ctrl sd_ctrls[] = {
> >> +static const struct ctrl sd_ctrls[] = {
> >>  #define SD_BRIGHTNESS 0
> >>    {
> >>        {
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/spca508.c
> >> --- a/linux/drivers/media/video/gspca/spca508.c    Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/spca508.c    Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -45,7 +45,7 @@
> >>  static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val);
> >>  static int sd_getbrightness(struct gspca_dev *gspca_dev, __s32 *val);
> >>
> >> -static struct ctrl sd_ctrls[] = {
> >> +static const struct ctrl sd_ctrls[] = {
> >>    {
> >>        {
> >>            .id      = V4L2_CID_BRIGHTNESS,
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/spca561.c
> >> --- a/linux/drivers/media/video/gspca/spca561.c    Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/spca561.c    Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -953,7 +953,7 @@
> >>  }
> >>
> >>  /* control tables */
> >> -static struct ctrl sd_ctrls_12a[] = {
> >> +static const struct ctrl sd_ctrls_12a[] = {
> >>    {
> >>        {
> >>            .id = V4L2_CID_HUE,
> >> @@ -995,7 +995,7 @@
> >>    },
> >>  };
> >>
> >> -static struct ctrl sd_ctrls_72a[] = {
> >> +static const struct ctrl sd_ctrls_72a[] = {
> >>    {
> >>        {
> >>            .id = V4L2_CID_HUE,
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/stk014.c
> >> --- a/linux/drivers/media/video/gspca/stk014.c     Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/stk014.c     Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -53,7 +53,7 @@
> >>  static int sd_setfreq(struct gspca_dev *gspca_dev, __s32 val);
> >>  static int sd_getfreq(struct gspca_dev *gspca_dev, __s32 *val);
> >>
> >> -static struct ctrl sd_ctrls[] = {
> >> +static const struct ctrl sd_ctrls[] = {
> >>    {
> >>        {
> >>            .id      = V4L2_CID_BRIGHTNESS,
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/stv0680.c
> >> --- a/linux/drivers/media/video/gspca/stv0680.c    Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/stv0680.c    Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -45,7 +45,7 @@
> >>  };
> >>
> >>  /* V4L2 controls supported by the driver */
> >> -static struct ctrl sd_ctrls[] = {
> >> +static const struct ctrl sd_ctrls[] = {
> >>  };
> >>
> >>  static int stv_sndctrl(struct gspca_dev *gspca_dev, int set, u8 req, u16 
> >> val,
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/sunplus.c
> >> --- a/linux/drivers/media/video/gspca/sunplus.c    Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/sunplus.c    Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -67,7 +67,7 @@
> >>  static int sd_setautogain(struct gspca_dev *gspca_dev, __s32 val);
> >>  static int sd_getautogain(struct gspca_dev *gspca_dev, __s32 *val);
> >>
> >> -static struct ctrl sd_ctrls[] = {
> >> +static const struct ctrl sd_ctrls[] = {
> >>    {
> >>        {
> >>            .id      = V4L2_CID_BRIGHTNESS,
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/t613.c
> >> --- a/linux/drivers/media/video/gspca/t613.c       Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/t613.c       Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -78,7 +78,7 @@
> >>  static int sd_querymenu(struct gspca_dev *gspca_dev,
> >>                    struct v4l2_querymenu *menu);
> >>
> >> -static struct ctrl sd_ctrls[] = {
> >> +static const struct ctrl sd_ctrls[] = {
> >>    {
> >>     {
> >>      .id = V4L2_CID_BRIGHTNESS,
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/tv8532.c
> >> --- a/linux/drivers/media/video/gspca/tv8532.c     Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/tv8532.c     Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -39,7 +39,7 @@
> >>  static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val);
> >>  static int sd_getbrightness(struct gspca_dev *gspca_dev, __s32 *val);
> >>
> >> -static struct ctrl sd_ctrls[] = {
> >> +static const struct ctrl sd_ctrls[] = {
> >>    {
> >>     {
> >>      .id = V4L2_CID_BRIGHTNESS,
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/vc032x.c
> >> --- a/linux/drivers/media/video/gspca/vc032x.c     Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/vc032x.c     Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -78,7 +78,7 @@
> >>  static int sd_setsharpness(struct gspca_dev *gspca_dev, __s32 val);
> >>  static int sd_getsharpness(struct gspca_dev *gspca_dev, __s32 *val);
> >>
> >> -static struct ctrl sd_ctrls[] = {
> >> +static const struct ctrl sd_ctrls[] = {
> >>  #define BRIGHTNESS_IDX 0
> >>    {
> >>        {
> >> diff -r 563555b04382 linux/drivers/media/video/gspca/zc3xx.c
> >> --- a/linux/drivers/media/video/gspca/zc3xx.c      Sun Dec 27 17:18:24 
> >> 2009 +0100
> >> +++ b/linux/drivers/media/video/gspca/zc3xx.c      Tue Dec 29 21:03:28 
> >> 2009 +0100
> >> @@ -92,7 +92,7 @@
> >>  static int sd_setsharpness(struct gspca_dev *gspca_dev, __s32 val);
> >>  static int sd_getsharpness(struct gspca_dev *gspca_dev, __s32 *val);
> >>
> >> -static struct ctrl sd_ctrls[] = {
> >> +static const struct ctrl sd_ctrls[] = {
> >>  #define BRIGHTNESS_IDX 0
> >>  #define SD_BRIGHTNESS 0
> >>    {
> >>
> 
_______________________________________________
Cocci mailing list
[email protected]
http://lists.diku.dk/mailman/listinfo/cocci
(Web access from inside DIKUs LAN only)

Reply via email to