From 811dc7b815d1e08dab00774749434088ff746ea9 Mon Sep 17 00:00:00 2001 From: Cyril Roelandt Date: Tue, 18 Dec 2012 14:21:28 -0800 Subject: [PATCH] --- yaml --- r: 346997 b: refs/heads/master c: af56e3f017bae54b9c3b5f7877d5eff990a2eed9 h: refs/heads/master i: 346995: 4149559798bd58462ecc34f5005f4bda89642642 v: v3 --- [refs] | 2 +- .../scripts/coccinelle/api/d_find_alias.cocci | 80 +++++++++++++++++++ 2 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 trunk/scripts/coccinelle/api/d_find_alias.cocci diff --git a/[refs] b/[refs] index 3075c6b9caa2..2aaa9bc8b4be 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 19af395d7c0daaafdebd441a162128aaac575912 +refs/heads/master: af56e3f017bae54b9c3b5f7877d5eff990a2eed9 diff --git a/trunk/scripts/coccinelle/api/d_find_alias.cocci b/trunk/scripts/coccinelle/api/d_find_alias.cocci new file mode 100644 index 000000000000..a9694a8d3e5a --- /dev/null +++ b/trunk/scripts/coccinelle/api/d_find_alias.cocci @@ -0,0 +1,80 @@ +/// Make sure calls to d_find_alias() have a corresponding call to dput(). +// +// Keywords: d_find_alias, dput +// +// Confidence: Moderate +// URL: http://coccinelle.lip6.fr/ +// Options: -include_headers + +virtual context +virtual org +virtual patch +virtual report + +@r exists@ +local idexpression struct dentry *dent; +expression E, E1; +statement S1, S2; +position p1, p2; +@@ +( + if (!(dent@p1 = d_find_alias(...))) S1 +| + dent@p1 = d_find_alias(...) +) + +<...when != dput(dent) + when != if (...) { <+... dput(dent) ...+> } + when != true !dent || ... + when != dent = E + when != E = dent +if (!dent || ...) S2 +...> +( + return <+...dent...+>; +| + return @p2 ...; +| + dent@p2 = E1; +| + E1 = dent; +) + +@depends on context@ +local idexpression struct dentry *r.dent; +position r.p1,r.p2; +@@ +* dent@p1 = ... + ... +( +* return@p2 ...; +| +* dent@p2 +) + + +@script:python depends on org@ +p1 << r.p1; +p2 << r.p2; +@@ +cocci.print_main("Missing call to dput()",p1) +cocci.print_secs("",p2) + +@depends on patch@ +local idexpression struct dentry *r.dent; +position r.p2; +@@ +( ++ dput(dent); + return @p2 ...; +| ++ dput(dent); + dent@p2 = ...; +) + +@script:python depends on report@ +p1 << r.p1; +p2 << r.p2; +@@ +msg = "Missing call to dput() at line %s." +coccilib.report.print_report(p1[0], msg % (p2[0].line))