@r exists@
local idexpression x;
statement S,S1;
position p1,p2,p3;
expression E,E1,E2;
type T,T1,T2;
expression *ptr != NULL;
@@
(
if ((x@p1 = pci_get_device(...)) == NULL) S
|
x@p1 = pci_get_device(...);
)
... when != pci_dev_put(...,(T)x,...)
when != if (...) { <+... pci_dev_put(...,(T)x,...) ...+> }
when != true x == NULL || ...
when != x = E
when != E = (T)x
when any
(
if (x == NULL || ...) S1
|
if@p2 (...) {
... when != pci_dev_put(...,(T1)x,...)
when != if (...) { <+... pci_dev_put(...,(T1)x,...) ...+> }
when != x = E1
when != E1 = (T1)x
(
return \(0\|<+...x...+>\|ptr\);
|
return@p3 ...;
)
}
)
... when != x = E2
pci_dev_put(...,(T2)x,...)
@ script:python @
p1 << r.p1;
p2 << r.p2;
p3 << r.p3;
@@
print "* TODO [[view:%s::face=ovl-face1::linb=%s::colb=%s::cole=%s][%s::%s]]" % (p1[0].file,p1[0].line,p1[0].column,p1[0].column_end,p1[0].file,p1[0].line)
for i in p2:
print "[[view:%s::face=ovl-face3::linb=%s::colb=%s::cole=%s][if::%s]]" % (i.file,i.line,i.column,i.column_end,i.line)
for i in p3:
print "[[view:%s::face=ovl-face2::linb=%s::colb=%s::cole=%s][return::%s]]" % (i.file,i.line,i.column,i.column_end,i.line)
cocci.include_match(False)