// pci_get_device, etc call pci_dev_get, and thus pci_dev_put must be used // before dropping a reference to the location. // // Confidence: Moderate // Copyright: (C) Gilles Muller, Julia Lawall, EMN, INRIA, DIKU. GPLv2. // URL: https://coccinelle.gitlabpages.inria.fr/website/rules/add_pci_dev.html // Options: @@ local idexpression d; expression e; expression *ptr != NULL; @@ while ((d = \(pci_get_device\|pci_get_device_reverse\|pci_get_subsys\|pci_get_class\)(..., d)) != NULL) {... when != pci_dev_put(d) when != e = d ( return \(<+...d...+>\|ptr\); | + pci_dev_put(d); ? return ...; ) ...} @@ local idexpression d; expression e; expression *ptr != NULL; iterator name for_each_pci_dev; @@ for_each_pci_dev(d) {... when != pci_dev_put(d) when != e = d ( return \(<+...d...+>\|ptr\); | + pci_dev_put(d); ? return ...; ) ...}