On Sat, 21 Jun 2014, Rusty Russell wrote:

> Hi!
> 
>         In my current project, I moved a field from a structure
> (struct block) into another network-endian structure.  I used the
> following patch.cocci to do the fixups:
> 
>         @ rule1 @
>         struct block *b;
>         @@
>         
>         - b->blocknum
>         + le32_to_cpu(b->hdr->depth)
> 
> It got 99%, but it missed the two cases where b was actually in another
> structure, ie. "te->block->blocknum".
> 
> I *think* this is because I want to substitute any expression of type
> struct block *, rather than only identifiers?
> 
> But I couldn't understand the documentation enough to do this :(

You are already working on expressions.  The problem is that sometimes 
Coccinelle doesn't know what is the type of te->block.  To give it the 
most possible amount of informations, you can give the options

--recursive-includes --relax-include-path

The first means that it will take into account include files that are 
referenced from other include files rather than just those referenced 
directly in the C file.  The second means that if it doesn't find xyz.h in 
the include path but it does find exactly one xyz.h somewhere else in the 
source tree, then it will use that xyz.h, since it has to be the right 
one.

This will probably take more time than it is taking now, because it has to 
parse more code.  You may want to use the option --use-cache so that it 
will cache already parsed code.

julia
_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci

Reply via email to