On Tue, 3 Jul 2012, Håkon Løvdal wrote:

> On 5 January 2012 14:56, Robert Gomulka <[email protected]> wrote:
> > is it possible to combine positive and negative regular expressions?
> > As I said above, I'd rather drop them altogether, however I'm just
> > curious whether it's possible to search for functions ending with
> > malloc, but not "bad_malloc" and "another_malloc" (because they have
> > separate API)?
>
> Yes. Create a rule to just match the malloc functions you want to treat
> different and bind the match with a position. Then in the rule where
> you do the transformation use a position variable that you bind to
> be everything but the first position. E.g.
>
> (hlovdal) localhost:/download/2012/07_jul/cocci>more malloc_fix.c*
> ::::::::::::::
> malloc_fix.c
> ::::::::::::::
>
> void test(void)
> {
>         char *p1, *p2;
>         malloc(p1);
>         different_malloc(p1);
> }
>
> ::::::::::::::
> malloc_fix.cocci
> ::::::::::::::
>
> @rule1@
> position p1;
> @@
> different_malloc@p1(...)
>
> @rule2@
> identifier malloc_function =~ "malloc$";
> position p2 != rule1.p1;
> type T;
> T *x;
> @@
>
> malloc_function@p2
>  (
> -  x
> +  *(x)
>  )
>
> (hlovdal) localhost:/download/2012/07_jul/cocci>spatch -sp_file
> malloc_fix.cocci malloc_fix.c
> init_defs_builtins: /usr/share/coccinelle/standard.h
> HANDLING: malloc_fix.c
> diff =
> --- malloc_fix.c
> +++ /tmp/cocci-output-21515-8dc9a9-malloc_fix.c
> @@ -2,7 +2,7 @@
>  void test(void)
>  {
>         char *p1, *p2;
> -       malloc(p1);
> +       malloc(*(p1));
>         different_malloc(p1);
>  }
>
> (hlovdal) localhost:/download/2012/07_jul/cocci>

You can also do it in one rule, as

(
different_malloc(...)
|
malloc (
-  x
+  *(x)
  )
)

julia
_______________________________________________
Cocci mailing list
[email protected]
http://lists.diku.dk/mailman/listinfo/cocci
(Web access from inside DIKUs LAN only)

Reply via email to