Linux Audio

Check our new training course

Linux kernel drivers training

Mar 31-Apr 9, 2025, special US time zones
Register
Loading...
v5.9
  1// SPDX-License-Identifier: GPL-2.0-only
  2/// These iterators only exit normally when the loop cursor is NULL, so there
  3/// is no point to call of_node_put on the final value.
  4///
  5// Confidence: High
  6// Copyright: (C) 2010-2012 Nicolas Palix.
  7// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
  8// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
  9// URL: http://coccinelle.lip6.fr/
 10// Comments:
 11// Options: --no-includes --include-headers
 12
 13virtual patch
 14virtual context
 15virtual org
 16virtual report
 17
 18@depends on patch@
 19iterator name for_each_node_by_name;
 20expression np,E;
 21identifier l;
 22@@
 23
 24for_each_node_by_name(np,...) {
 25  ... when != break;
 26      when != goto l;
 27}
 28... when != np = E
 29- of_node_put(np);
 30
 31@depends on patch@
 32iterator name for_each_node_by_type;
 33expression np,E;
 34identifier l;
 35@@
 36
 37for_each_node_by_type(np,...) {
 38  ... when != break;
 39      when != goto l;
 40}
 41... when != np = E
 42- of_node_put(np);
 43
 44@depends on patch@
 45iterator name for_each_compatible_node;
 46expression np,E;
 47identifier l;
 48@@
 49
 50for_each_compatible_node(np,...) {
 51  ... when != break;
 52      when != goto l;
 53}
 54... when != np = E
 55- of_node_put(np);
 56
 57@depends on patch@
 58iterator name for_each_matching_node;
 59expression np,E;
 60identifier l;
 61@@
 62
 63for_each_matching_node(np,...) {
 64  ... when != break;
 65      when != goto l;
 66}
 67... when != np = E
 68- of_node_put(np);
 69
 70// ----------------------------------------------------------------------
 71
 72@r depends on !patch forall@
 73//iterator name for_each_node_by_name;
 74//iterator name for_each_node_by_type;
 75//iterator name for_each_compatible_node;
 76//iterator name for_each_matching_node;
 77expression np,E;
 78identifier l;
 79position p1,p2;
 80@@
 81
 82(
 83*for_each_node_by_name@p1(np,...)
 84{
 85  ... when != break;
 86      when != goto l;
 87}
 88|
 89*for_each_node_by_type@p1(np,...)
 90{
 91  ... when != break;
 92      when != goto l;
 93}
 94|
 95*for_each_compatible_node@p1(np,...)
 96{
 97  ... when != break;
 98      when != goto l;
 99}
100|
101*for_each_matching_node@p1(np,...)
102{
103  ... when != break;
104      when != goto l;
105}
106)
107... when != np = E
108* of_node_put@p2(np);
109
110@script:python depends on org@
111p1 << r.p1;
112p2 << r.p2;
113@@
114
115cocci.print_main("unneeded of_node_put",p2)
116cocci.print_secs("iterator",p1)
117
118@script:python depends on report@
119p1 << r.p1;
120p2 << r.p2;
121@@
122
123msg = "ERROR: of_node_put not needed after iterator on line %s" % (p1[0].line)
124coccilib.report.print_report(p2[0], msg)
v3.5.6
 
  1/// These iterators only exit normally when the loop cursor is NULL, so there
  2/// is no point to call of_node_put on the final value.
  3///
  4// Confidence: High
  5// Copyright: (C) 2010-2012 Nicolas Palix.  GPLv2.
  6// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.  GPLv2.
  7// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.  GPLv2.
  8// URL: http://coccinelle.lip6.fr/
  9// Comments:
 10// Options: -no_includes -include_headers
 11
 12virtual patch
 13virtual context
 14virtual org
 15virtual report
 16
 17@depends on patch@
 18iterator name for_each_node_by_name;
 19expression np,E;
 20identifier l;
 21@@
 22
 23for_each_node_by_name(np,...) {
 24  ... when != break;
 25      when != goto l;
 26}
 27... when != np = E
 28- of_node_put(np);
 29
 30@depends on patch@
 31iterator name for_each_node_by_type;
 32expression np,E;
 33identifier l;
 34@@
 35
 36for_each_node_by_type(np,...) {
 37  ... when != break;
 38      when != goto l;
 39}
 40... when != np = E
 41- of_node_put(np);
 42
 43@depends on patch@
 44iterator name for_each_compatible_node;
 45expression np,E;
 46identifier l;
 47@@
 48
 49for_each_compatible_node(np,...) {
 50  ... when != break;
 51      when != goto l;
 52}
 53... when != np = E
 54- of_node_put(np);
 55
 56@depends on patch@
 57iterator name for_each_matching_node;
 58expression np,E;
 59identifier l;
 60@@
 61
 62for_each_matching_node(np,...) {
 63  ... when != break;
 64      when != goto l;
 65}
 66... when != np = E
 67- of_node_put(np);
 68
 69// ----------------------------------------------------------------------
 70
 71@r depends on !patch forall@
 72//iterator name for_each_node_by_name;
 73//iterator name for_each_node_by_type;
 74//iterator name for_each_compatible_node;
 75//iterator name for_each_matching_node;
 76expression np,E;
 77identifier l;
 78position p1,p2;
 79@@
 80
 81(
 82*for_each_node_by_name@p1(np,...)
 83{
 84  ... when != break;
 85      when != goto l;
 86}
 87|
 88*for_each_node_by_type@p1(np,...)
 89{
 90  ... when != break;
 91      when != goto l;
 92}
 93|
 94*for_each_compatible_node@p1(np,...)
 95{
 96  ... when != break;
 97      when != goto l;
 98}
 99|
100*for_each_matching_node@p1(np,...)
101{
102  ... when != break;
103      when != goto l;
104}
105)
106... when != np = E
107* of_node_put@p2(np);
108
109@script:python depends on org@
110p1 << r.p1;
111p2 << r.p2;
112@@
113
114cocci.print_main("unneeded of_node_put",p2)
115cocci.print_secs("iterator",p1)
116
117@script:python depends on report@
118p1 << r.p1;
119p2 << r.p2;
120@@
121
122msg = "ERROR: of_node_put not needed after iterator on line %s" % (p1[0].line)
123coccilib.report.print_report(p2[0], msg)