On Thu, Apr 1, 2021 at 4:13 AM Michael Walle <mich...@walle.cc> wrote: > > Hi, > > so first I need to say I've never used coccinelle before, > so please bear with me ;) > > To make of_get_mac_address() work with DSA ports (and a nvmem > provider) I'd need to change the semantics of of_get_mac_address(). > Right now it returns a pointer to "const char *", I'd need to change > that so a buffer will be passed as a parameter in which the MAC > address gets stored. > > (1) Usually the call is something like: > > const char *mac; > mac = of_get_mac_address(np); > if (!IS_ERR(mac)) > ether_addr_copy(ndev->dev_addr, mac); > > This would need to be changed to: > > of_get_mac_address(np, ndev->dev_addr);
Here is one possible approach, doing the API change first then handling the conditionals. It seems to work. @a@ identifier x; expression y, z; @@ - x = of_get_mac_address(y); + x = of_get_mac_address(y, z); <... - ether_addr_copy(z, x); ...> @@ identifier a.x; @@ - if (<+... x ...+>) {} @@ identifier a.x; @@ if (<+... x ...+>) { ... } - else {} @@ identifier a.x; expression e; @@ - if (<+... x ...+>@e) - {} - else + if (!(e)) {...} @@ expression x, y, z; @@ - x = of_get_mac_address(y, z); + of_get_mac_address(y, z); ... when != x _______________________________________________ Cocci mailing list Cocci@systeme.lip6.fr https://systeme.lip6.fr/mailman/listinfo/cocci