| @r1@ |
| struct net_device *NDEV; |
| identifier D, C; |
| identifier TRUE =~ "true"; |
| @@ |
| C(...) |
| { |
| <+... |
| - NDEV->needs_free_netdev = TRUE; |
| - NDEV->priv_destructor = D; |
| + netdev_set_priv_destructor(NDEV, D); |
| ...+> |
| } |
| |
| @r2 depends on r1@ |
| identifier r1.D, r1.C; |
| fresh identifier E = "__" ## D; |
| @@ |
| |
| +#if LINUX_VERSION_IS_LESS(4,12,0) |
| +static void E(struct net_device *ndev) |
| +{ |
| + D(ndev); |
| + free_netdev(ndev); |
| +} |
| +#endif |
| + |
| C(...) |
| { |
| ... |
| } |
| |
| @r3 depends on r1@ |
| type T; |
| identifier NDEV; |
| identifier r1.D; |
| T RET; |
| @@ |
| |
| RET = \(register_netdevice\|register_ndev\)(NDEV); |
| if (<+... RET ...+>) { |
| <... |
| +#if LINUX_VERSION_IS_LESS(4,12,0) |
| + D(NDEV); |
| +#endif |
| free_netdev(NDEV); |
| ...> |
| } |
| |
| @r4 depends on r1@ |
| identifier NDEV; |
| identifier r1.D; |
| type T; |
| T RET; |
| @@ |
| |
| if (...) |
| RET = register_netdevice(NDEV); |
| else |
| RET = register_netdev(NDEV); |
| if (<+... RET ...+>) { |
| <... |
| +#if LINUX_VERSION_IS_LESS(4,12,0) |
| + D(NDEV); |
| +#endif |
| free_netdev(NDEV); |
| ...> |
| } |
| |
| @r11@ |
| struct net_device *NDEV; |
| identifier D, C; |
| identifier TRUE =~ "true"; |
| @@ |
| C(...) |
| { |
| <+... |
| - NDEV->priv_destructor = D; |
| - NDEV->needs_free_netdev = TRUE; |
| + netdev_set_priv_destructor(NDEV, D); |
| ...+> |
| } |
| |
| @r12 depends on r11@ |
| identifier r11.D, r11.C; |
| fresh identifier E = "__" ## D; |
| @@ |
| |
| +#if LINUX_VERSION_IS_LESS(4,12,0) |
| +static void E(struct net_device *ndev) |
| +{ |
| + D(ndev); |
| + free_netdev(ndev); |
| +} |
| +#endif |
| + |
| C(...) |
| { |
| ... |
| } |
| |
| @r5@ |
| struct net_device *NDEV; |
| identifier TRUE =~ "true"; |
| @@ |
| |
| -NDEV->needs_free_netdev = TRUE; |
| +netdev_set_def_destructor(NDEV); |
| |
| @r6@ |
| struct net_device *NDEV; |
| identifier D; |
| @@ |
| |
| -NDEV->priv_destructor = D; |
| +netdev_set_priv_destructor(NDEV, D); |