Fixed MTP to work with TWRP

This commit is contained in:
awab228 2018-06-19 23:16:04 +02:00
commit f6dfaef42e
50820 changed files with 20846062 additions and 0 deletions

View file

@ -0,0 +1,87 @@
/// Use ARRAY_SIZE instead of dividing sizeof array with sizeof an element
///
//# This makes an effort to find cases where ARRAY_SIZE can be used such as
//# where there is a division of sizeof the array by the sizeof its first
//# element or by any indexed element or the element type. It replaces the
//# division of the two sizeofs by ARRAY_SIZE.
//
// Confidence: High
// Copyright: (C) 2014 Himangi Saraogi. GPLv2.
// Comments:
// Options: --no-includes --include-headers
virtual patch
virtual context
virtual org
virtual report
@i@
@@
#include <linux/kernel.h>
//----------------------------------------------------------
// For context mode
//----------------------------------------------------------
@depends on i&&context@
type T;
T[] E;
@@
(
* (sizeof(E)/sizeof(*E))
|
* (sizeof(E)/sizeof(E[...]))
|
* (sizeof(E)/sizeof(T))
)
//----------------------------------------------------------
// For patch mode
//----------------------------------------------------------
@depends on i&&patch@
type T;
T[] E;
@@
(
- (sizeof(E)/sizeof(*E))
+ ARRAY_SIZE(E)
|
- (sizeof(E)/sizeof(E[...]))
+ ARRAY_SIZE(E)
|
- (sizeof(E)/sizeof(T))
+ ARRAY_SIZE(E)
)
//----------------------------------------------------------
// For org and report mode
//----------------------------------------------------------
@r@
type T;
T[] E;
position p;
@@
(
(sizeof(E)@p /sizeof(*E))
|
(sizeof(E)@p /sizeof(E[...]))
|
(sizeof(E)@p /sizeof(T))
)
@script:python depends on i&&org@
p << r.p;
@@
coccilib.org.print_todo(p[0], "WARNING should use ARRAY_SIZE")
@script:python depends on i&&report@
p << r.p;
@@
msg="WARNING: Use ARRAY_SIZE"
coccilib.report.print_report(p[0], msg)

View file

@ -0,0 +1,76 @@
/// Use ARRAY_SIZE instead of dividing sizeof array with sizeof an element
///
//# This makes an effort to find cases where the argument to sizeof is wrong
//# in memory allocation functions by checking the type of the allocated memory
//# when it is a double pointer and ensuring the sizeof argument takes a pointer
//# to the the memory being allocated. There are false positives in cases the
//# sizeof argument is not used in constructing the return value. The result
//# may need some reformatting.
//
// Confidence: Moderate
// Copyright: (C) 2014 Himangi Saraogi. GPLv2.
// Comments:
// Options:
virtual patch
virtual context
virtual org
virtual report
//----------------------------------------------------------
// For context mode
//----------------------------------------------------------
@depends on context disable sizeof_type_expr@
type T;
T **x;
@@
x =
<+...sizeof(
* T
)...+>
//----------------------------------------------------------
// For patch mode
//----------------------------------------------------------
@depends on patch disable sizeof_type_expr@
type T;
T **x;
@@
x =
<+...sizeof(
- T
+ *x
)...+>
//----------------------------------------------------------
// For org and report mode
//----------------------------------------------------------
@r disable sizeof_type_expr@
type T;
T **x;
position p;
@@
x =
<+...sizeof(
T@p
)...+>
@script:python depends on org@
p << r.p;
@@
coccilib.org.print_todo(p[0], "WARNING sizeof argument should be pointer type, not structure type")
@script:python depends on report@
p << r.p;
@@
msg="WARNING: Use correct pointer type argument for sizeof"
coccilib.report.print_report(p[0], msg)

View file

@ -0,0 +1,178 @@
/// Bool initializations should use true and false. Bool tests don't need
/// comparisons. Based on contributions from Joe Perches, Rusty Russell
/// and Bruce W Allan.
///
// Confidence: High
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2.
// URL: http://coccinelle.lip6.fr/
// Options: --include-headers
virtual patch
virtual context
virtual org
virtual report
@depends on patch@
bool t;
symbol true;
symbol false;
@@
(
- t == true
+ t
|
- true == t
+ t
|
- t != true
+ !t
|
- true != t
+ !t
|
- t == false
+ !t
|
- false == t
+ !t
|
- t != false
+ t
|
- false != t
+ t
)
@depends on patch disable is_zero, isnt_zero@
bool t;
@@
(
- t == 1
+ t
|
- t != 1
+ !t
|
- t == 0
+ !t
|
- t != 0
+ t
)
@depends on patch@
bool b;
@@
(
b =
- 0
+ false
|
b =
- 1
+ true
)
// ---------------------------------------------------------------------
@r1 depends on !patch@
bool t;
position p;
@@
(
* t@p == true
|
* true == t@p
|
* t@p != true
|
* true != t@p
|
* t@p == false
|
* false == t@p
|
* t@p != false
|
* false != t@p
)
@r2 depends on !patch disable is_zero, isnt_zero@
bool t;
position p;
@@
(
* t@p == 1
|
* t@p != 1
|
* t@p == 0
|
* t@p != 0
)
@r3 depends on !patch@
bool b;
position p1,p2;
constant c;
@@
(
*b@p1 = 0
|
*b@p1 = 1
|
*b@p2 = c
)
@script:python depends on org@
p << r1.p;
@@
cocci.print_main("WARNING: Comparison to bool",p)
@script:python depends on org@
p << r2.p;
@@
cocci.print_main("WARNING: Comparison of bool to 0/1",p)
@script:python depends on org@
p1 << r3.p1;
@@
cocci.print_main("WARNING: Assignment of bool to 0/1",p1)
@script:python depends on org@
p2 << r3.p2;
@@
cocci.print_main("ERROR: Assignment of bool to non-0/1 constant",p2)
@script:python depends on report@
p << r1.p;
@@
coccilib.report.print_report(p[0],"WARNING: Comparison to bool")
@script:python depends on report@
p << r2.p;
@@
coccilib.report.print_report(p[0],"WARNING: Comparison of bool to 0/1")
@script:python depends on report@
p1 << r3.p1;
@@
coccilib.report.print_report(p1[0],"WARNING: Assignment of bool to 0/1")
@script:python depends on report@
p2 << r3.p2;
@@
coccilib.report.print_report(p2[0],"ERROR: Assignment of bool to non-0/1 constant")

View file

@ -0,0 +1,58 @@
/// Return statements in functions returning bool should use
/// true/false instead of 1/0.
//
// Confidence: High
// Options: --no-includes --include-headers
virtual patch
virtual report
virtual context
@r1 depends on patch@
identifier fn;
typedef bool;
symbol false;
symbol true;
@@
bool fn ( ... )
{
<...
return
(
- 0
+ false
|
- 1
+ true
)
;
...>
}
@r2 depends on report || context@
identifier fn;
position p;
@@
bool fn ( ... )
{
<...
return
(
* 0@p
|
* 1@p
)
;
...>
}
@script:python depends on report@
p << r2.p;
fn << r2.fn;
@@
msg = "WARNING: return of 0/1 in function '%s' with return type bool" % fn
coccilib.report.print_report(p[0], msg)

View file

@ -0,0 +1,62 @@
/// Use BUG_ON instead of a if condition followed by BUG.
///
//# This makes an effort to find cases where BUG() follows an if
//# condition on an expression and replaces the if condition and BUG()
//# with a BUG_ON having the conditional expression of the if statement
//# as argument.
//
// Confidence: High
// Copyright: (C) 2014 Himangi Saraogi. GPLv2.
// Comments:
// Options: --no-includes --include-headers
virtual patch
virtual context
virtual org
virtual report
//----------------------------------------------------------
// For context mode
//----------------------------------------------------------
@depends on context@
expression e;
@@
*if (e) BUG();
//----------------------------------------------------------
// For patch mode
//----------------------------------------------------------
@depends on patch@
expression e;
@@
-if (e) BUG();
+BUG_ON(e);
//----------------------------------------------------------
// For org and report mode
//----------------------------------------------------------
@r@
expression e;
position p;
@@
if (e) BUG@p ();
@script:python depends on org@
p << r.p;
@@
coccilib.org.print_todo(p[0], "WARNING use BUG_ON")
@script:python depends on report@
p << r.p;
@@
msg="WARNING: Use BUG_ON"
coccilib.report.print_report(p[0], msg)

View file

@ -0,0 +1,41 @@
/// PTR_ERR should be applied before its argument is reassigned, typically
/// to NULL
///
// Confidence: High
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2.
// URL: http://coccinelle.lip6.fr/
// Comments:
// Options: --no-includes --include-headers
virtual org
virtual report
virtual context
@r exists@
expression e,e1;
constant c;
position p1,p2;
@@
*e@p1 = c
... when != e = e1
when != &e
when != true IS_ERR(e)
*PTR_ERR@p2(e)
@script:python depends on org@
p1 << r.p1;
p2 << r.p2;
@@
cocci.print_main("PTR_ERR",p2)
cocci.print_secs("assignment",p1)
@script:python depends on report@
p1 << r.p1;
p2 << r.p2;
@@
msg = "ERROR: PTR_ERR applied after initialization to constant on line %s" % (p1[0].line)
coccilib.report.print_report(p2[0],msg)

View file

@ -0,0 +1,53 @@
/// Find duplicate field initializations. This has a high rate of false
/// positives due to #ifdefs, which Coccinelle is not aware of in a structure
/// initialization.
///
// Confidence: Low
// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2.
// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2.
// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2.
// URL: http://coccinelle.lip6.fr/
// Comments: requires at least Coccinelle 0.2.4, lex or parse error otherwise
// Options: --no-includes --include-headers
virtual org
virtual report
@r@
identifier I, s, fld;
position p0,p;
expression E;
@@
struct I s =@p0 { ..., .fld@p = E, ...};
@s@
identifier I, s, r.fld;
position r.p0,p;
expression E;
@@
struct I s =@p0 { ..., .fld@p = E, ...};
@script:python depends on org@
p0 << r.p0;
fld << r.fld;
ps << s.p;
pr << r.p;
@@
if int(ps[0].line) < int(pr[0].line) or (int(ps[0].line) == int(pr[0].line) and int(ps[0].column) < int(pr[0].column)):
cocci.print_main(fld,p0)
cocci.print_secs("s",ps)
cocci.print_secs("r",pr)
@script:python depends on report@
p0 << r.p0;
fld << r.fld;
ps << s.p;
pr << r.p;
@@
if int(ps[0].line) < int(pr[0].line) or (int(ps[0].line) == int(pr[0].line) and int(ps[0].column) < int(pr[0].column)):
msg = "%s: first occurrence line %s, second occurrence line %s" % (fld,ps[0].line,pr[0].line)
coccilib.report.print_report(p0[0],msg)

View file

@ -0,0 +1,35 @@
/// the address of a variable or field is non-zero is likely always to bo
/// non-zero
///
// Confidence: High
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2.
// URL: http://coccinelle.lip6.fr/
// Comments:
// Options: --no-includes --include-headers
virtual org
virtual report
virtual context
@r@
expression x;
statement S1,S2;
position p;
@@
*if@p (&x)
S1 else S2
@script:python depends on org@
p << r.p;
@@
cocci.print_main("test of a variable/field address",p)
@script:python depends on report@
p << r.p;
@@
msg = "ERROR: test of a variable/field address"
coccilib.report.print_report(p[0],msg)

View file

@ -0,0 +1,48 @@
/// Find confusingly indented code in or after an if. An if branch should
/// be indented. The code following an if should not be indented.
/// Sometimes, code after an if that is indented is actually intended to be
/// part of the if branch.
///
/// This has a high rate of false positives, because Coccinelle's column
/// calculation does not distinguish between spaces and tabs, so code that
/// is not visually aligned may be considered to be in the same column.
///
// Confidence: Low
// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2.
// Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2.
// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2.
// URL: http://coccinelle.lip6.fr/
// Comments:
// Options: --no-includes --include-headers
virtual org
virtual report
@r disable braces4@
position p1,p2;
statement S1,S2;
@@
(
if (...) { ... }
|
if (...) S1@p1 S2@p2
)
@script:python depends on org@
p1 << r.p1;
p2 << r.p2;
@@
if (p1[0].column == p2[0].column):
cocci.print_main("branch",p1)
cocci.print_secs("after",p2)
@script:python depends on report@
p1 << r.p1;
p2 << r.p2;
@@
if (p1[0].column == p2[0].column):
msg = "code aligned with following code on line %s" % (p2[0].line)
coccilib.report.print_report(p1[0],msg)

View file

@ -0,0 +1,65 @@
/// Make sure threaded IRQs without a primary handler are always request with
/// IRQF_ONESHOT
///
//
// Confidence: Good
// Comments:
// Options: --no-includes
virtual patch
virtual context
virtual org
virtual report
@r1@
expression irq;
expression thread_fn;
expression flags;
position p;
@@
request_threaded_irq@p(irq, NULL, thread_fn,
(
flags | IRQF_ONESHOT
|
IRQF_ONESHOT
)
, ...)
@depends on patch@
expression irq;
expression thread_fn;
expression flags;
position p != r1.p;
@@
request_threaded_irq@p(irq, NULL, thread_fn,
(
-0
+IRQF_ONESHOT
|
-flags
+flags | IRQF_ONESHOT
)
, ...)
@depends on context@
position p != r1.p;
@@
*request_threaded_irq@p(...)
@match depends on report || org@
expression irq;
position p != r1.p;
@@
request_threaded_irq@p(irq, NULL, ...)
@script:python depends on org@
p << match.p;
@@
msg = "ERROR: Threaded IRQ with no primary handler requested without IRQF_ONESHOT"
coccilib.org.print_todo(p[0],msg)
@script:python depends on report@
p << match.p;
@@
msg = "ERROR: Threaded IRQ with no primary handler requested without IRQF_ONESHOT"
coccilib.report.print_report(p[0],msg)

View file

@ -0,0 +1,65 @@
/// sizeof when applied to a pointer typed expression gives the size of
/// the pointer
///
// Confidence: High
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2.
// URL: http://coccinelle.lip6.fr/
// Comments:
// Options: --no-includes --include-headers
virtual org
virtual report
virtual context
virtual patch
@depends on patch@
expression *x;
expression f;
type T;
@@
(
x = <+... sizeof(
- x
+ *x
) ...+>
|
f(...,(T)(x),...,sizeof(
- x
+ *x
),...)
|
f(...,sizeof(x),...,(T)(
- x
+ *x
),...)
)
@r depends on !patch@
expression *x;
expression f;
position p;
type T;
@@
(
*x = <+... sizeof@p(x) ...+>
|
*f(...,(T)(x),...,sizeof@p(x),...)
|
*f(...,sizeof@p(x),...,(T)(x),...)
)
@script:python depends on org@
p << r.p;
@@
cocci.print_main("application of sizeof to pointer",p)
@script:python depends on report@
p << r.p;
@@
msg = "ERROR: application of sizeof to pointer"
coccilib.report.print_report(p[0],msg)

View file

@ -0,0 +1,62 @@
/// Make sure of_device_id tables are NULL terminated
//
// Keywords: of_table
// Confidence: Medium
// Options: --include-headers
virtual patch
virtual context
virtual org
virtual report
@depends on context@
identifier var, arr;
expression E;
@@
struct of_device_id arr[] = {
...,
{
.var = E,
* }
};
@depends on patch@
identifier var, arr;
expression E;
@@
struct of_device_id arr[] = {
...,
{
.var = E,
- }
+ },
+ { }
};
@r depends on org || report@
position p1;
identifier var, arr;
expression E;
@@
struct of_device_id arr[] = {
...,
{
.var = E,
}
@p1
};
@script:python depends on org@
p1 << r.p1;
arr << r.arr;
@@
cocci.print_main(arr,p1)
@script:python depends on report@
p1 << r.p1;
arr << r.arr;
@@
msg = "%s is not NULL terminated at line %s" % (arr, p1[0].line)
coccilib.report.print_report(p1[0],msg)

View file

@ -0,0 +1,55 @@
/// Check for constants that are added but are used elsewhere as bitmasks
/// The results should be checked manually to ensure that the nonzero
/// bits in the two constants are actually disjoint.
///
// Confidence: Moderate
// Copyright: (C) 2013 Julia Lawall, INRIA/LIP6. GPLv2.
// Copyright: (C) 2013 Gilles Muller, INRIA/LIP6. GPLv2.
// URL: http://coccinelle.lip6.fr/
// Comments:
// Options: --no-includes --include-headers
virtual org
virtual report
virtual context
@r@
constant c;
identifier i;
expression e;
@@
(
e | c@i
|
e & c@i
|
e |= c@i
|
e &= c@i
)
@s@
constant r.c,c1;
identifier i1;
position p;
@@
(
c1 + c - 1
|
*c1@i1 +@p c
)
@script:python depends on org@
p << s.p;
@@
cocci.print_main("sum of probable bitmasks, consider |",p)
@script:python depends on report@
p << s.p;
@@
msg = "WARNING: sum of probable bitmasks, consider |"
coccilib.report.print_report(p[0],msg)

View file

@ -0,0 +1,66 @@
///
/// Removes unneeded variable used to store return value.
///
// Confidence: Moderate
// Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6. GPLv2.
// URL: http://coccinelle.lip6.fr/
// Comments: Comments on code can be deleted if near code that is removed.
// "when strict" can be removed to get more hits, but adds false
// positives
// Options: --no-includes --include-headers
virtual patch
virtual report
virtual context
virtual org
@depends on patch@
type T;
constant C;
identifier ret;
@@
- T ret = C;
... when != ret
when strict
return
- ret
+ C
;
@depends on context@
type T;
constant C;
identifier ret;
@@
* T ret = C;
... when != ret
when strict
* return ret;
@r1 depends on report || org@
type T;
constant C;
identifier ret;
position p1, p2;
@@
T ret@p1 = C;
... when != ret
when strict
return ret@p2;
@script:python depends on report@
p1 << r1.p1;
p2 << r1.p2;
C << r1.C;
ret << r1.ret;
@@
coccilib.report.print_report(p1[0], "Unneeded variable: \"" + ret + "\". Return \"" + C + "\" on line " + p2[0].line)
@script:python depends on org@
p1 << r1.p1;
p2 << r1.p2;
C << r1.C;
ret << r1.ret;
@@
cocci.print_main("unneeded \"" + ret + "\" variable", p1)
cocci.print_sec("return " + C + " here", p2)

View file

@ -0,0 +1,83 @@
///
/// Removes unneeded semicolon.
///
// Confidence: Moderate
// Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6. GPLv2.
// URL: http://coccinelle.lip6.fr/
// Comments: Some false positives on empty default cases in switch statements.
// Options: --no-includes --include-headers
virtual patch
virtual report
virtual context
virtual org
@r_default@
position p;
@@
switch (...)
{
default: ...;@p
}
@r_case@
position p;
@@
(
switch (...)
{
case ...:;@p
}
|
switch (...)
{
case ...:...
case ...:;@p
}
|
switch (...)
{
case ...:...
case ...:
case ...:;@p
}
)
@r1@
statement S;
position p1;
position p != {r_default.p, r_case.p};
identifier label;
@@
(
label:;
|
S@p1;@p
)
@script:python@
p << r1.p;
p1 << r1.p1;
@@
if p[0].line != p1[0].line_end:
cocci.include_match(False)
@depends on patch@
position r1.p;
@@
-;@p
@script:python depends on report@
p << r1.p;
@@
coccilib.report.print_report(p[0],"Unneeded semicolon")
@depends on context@
position r1.p;
@@
*;@p
@script:python depends on org@
p << r1.p;
@@
cocci.print_main("Unneeded semicolon",p)

View file

@ -0,0 +1,180 @@
/// Simplify a trivial if-return sequence. Possibly combine with a
/// preceding function call.
//
// Confidence: High
// Copyright: (C) 2014 Julia Lawall, INRIA/LIP6. GPLv2.
// Copyright: (C) 2014 Gilles Muller, INRIA/LiP6. GPLv2.
// URL: http://coccinelle.lip6.fr/
// Comments:
// Options: --no-includes --include-headers
virtual patch
virtual context
virtual org
virtual report
@r depends on patch@
local idexpression e;
identifier i,f,fn;
@@
fn(...) { <...
- e@i =
+ return
f(...);
-if (i != 0) return i;
-return 0;
...> }
@depends on patch@
identifier r.i;
type t;
@@
-t i;
... when != i
@depends on patch@
expression e;
@@
-if (e != 0)
return e;
-return 0;
// -----------------------------------------------------------------------
@s1 depends on context || org || report@
local idexpression e;
identifier i,f,fn;
position p,p1,p2;
@@
fn(...) { <...
* e@i@p = f(...);
if (\(i@p1 != 0\|i@p2 < 0\))
return i;
return 0;
...> }
@s2 depends on context || org || report forall@
identifier s1.i;
type t;
position q,s1.p;
expression e,f;
@@
* t i@q;
... when != i
e@p = f(...);
@s3 depends on context || org || report@
expression e;
position p1!=s1.p1;
position p2!=s1.p2;
@@
*if (\(e@p1 != 0\|e@p2 < 0\))
return e;
return 0;
// -----------------------------------------------------------------------
@script:python depends on org@
p << s1.p;
p1 << s1.p1;
q << s2.q;
@@
cocci.print_main("decl",q)
cocci.print_secs("use",p)
cocci.include_match(False)
@script:python depends on org@
p << s1.p;
p2 << s1.p2;
q << s2.q;
@@
cocci.print_main("decl",q)
cocci.print_secs("use with questionable test",p)
cocci.include_match(False)
@script:python depends on org@
p << s1.p;
p1 << s1.p1;
@@
cocci.print_main("use",p)
@script:python depends on org@
p << s1.p;
p2 << s1.p2;
@@
cocci.print_main("use with questionable test",p)
@script:python depends on org@
p << s3.p1;
@@
cocci.print_main("test",p)
@script:python depends on org@
p << s3.p2;
@@
cocci.print_main("questionable test",p)
// -----------------------------------------------------------------------
@script:python depends on report@
p << s1.p;
p1 << s1.p1;
q << s2.q;
@@
msg = "WARNING: end returns can be simpified and declaration on line %s can be dropped" % (q[0].line)
coccilib.report.print_report(p[0],msg)
cocci.include_match(False)
@script:python depends on report@
p << s1.p;
p1 << s1.p1;
q << s2.q
;
@@
msg = "WARNING: end returns may be simpified if negative or 0 value and declaration on line %s can be dropped" % (q[0].line)
coccilib.report.print_report(p[0],msg)
cocci.include_match(False)
@script:python depends on report@
p << s1.p;
p1 << s1.p1;
@@
msg = "WARNING: end returns can be simpified"
coccilib.report.print_report(p[0],msg)
@script:python depends on report@
p << s1.p;
p2 << s1.p2;
@@
msg = "WARNING: end returns can be simpified if negative or 0 value"
coccilib.report.print_report(p[0],msg)
@script:python depends on report@
p << s3.p1;
@@
msg = "WARNING: end returns can be simpified"
coccilib.report.print_report(p[0],msg)
@script:python depends on report@
p << s3.p2;
@@
msg = "WARNING: end returns can be simpified if tested value is negative or 0"
coccilib.report.print_report(p[0],msg)

View file

@ -0,0 +1,109 @@
/// Use WARN(1,...) rather than printk followed by WARN_ON(1)
///
// Confidence: High
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2.
// URL: http://coccinelle.lip6.fr/
// Comments:
// Options: --no-includes --include-headers
virtual patch
virtual context
virtual org
virtual report
@bad1@
position p;
@@
printk(...);
printk@p(...);
WARN_ON(1);
@r1 depends on context || report || org@
position p != bad1.p;
@@
printk@p(...);
*WARN_ON(1);
@script:python depends on org@
p << r1.p;
@@
cocci.print_main("printk + WARN_ON can be just WARN",p)
@script:python depends on report@
p << r1.p;
@@
msg = "SUGGESTION: printk + WARN_ON can be just WARN"
coccilib.report.print_report(p[0],msg)
@ok1 depends on patch@
expression list es;
position p != bad1.p;
@@
-printk@p(
+WARN(1,
es);
-WARN_ON(1);
@depends on patch@
expression list ok1.es;
@@
if (...)
- {
WARN(1,es);
- }
// --------------------------------------------------------------------
@bad2@
position p;
@@
printk(...);
printk@p(...);
WARN_ON_ONCE(1);
@r2 depends on context || report || org@
position p != bad1.p;
@@
printk@p(...);
*WARN_ON_ONCE(1);
@script:python depends on org@
p << r2.p;
@@
cocci.print_main("printk + WARN_ON_ONCE can be just WARN_ONCE",p)
@script:python depends on report@
p << r2.p;
@@
msg = "SUGGESTION: printk + WARN_ON_ONCE can be just WARN_ONCE"
coccilib.report.print_report(p[0],msg)
@ok2 depends on patch@
expression list es;
position p != bad2.p;
@@
-printk@p(
+WARN_ONCE(1,
es);
-WARN_ON_ONCE(1);
@depends on patch@
expression list ok2.es;
@@
if (...)
- {
WARN_ONCE(1,es);
- }