Hello,

I have tried another source code transformation approach out with
the software combination “Coccinelle 1.0.8-00004-g842075f7”.

@replacement@
expression count, item, source, target;
type t1, t2;
@@
 target = kmemdup(source,
+                 array_size(
(
                  sizeof(
-                        t1
+                        *source
                        )
|
                  count
)
-                 *
+                 ,
(
                  sizeof(
-                        t2
+                        *source
                        )
|
                  item
)
+                 )
                  , ...);


This small SmPL script can produce some “usable” results.
But I find the source code formatting occasionally questionable
according to the Linux coding style.

Example:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm/mach-omap2/omap_device.c?id=5bc52f64e8841c4526d74f1073bfa95d4f6224d4#n348
https://elixir.bootlin.com/linux/v5.4-rc2/source/arch/arm/mach-omap2/omap_device.c#L348

elfring@Sonne:~/Projekte/Linux/next-patched> spatch 
arch/arm/mach-omap2/omap_device.c 
~/Projekte/Coccinelle/janitor/use_array_size_for_kmemdup2.cocci
…
@@ -345,7 +345,7 @@ struct omap_device *omap_device_alloc(st
        }
        od->hwmods_cnt = oh_cnt;

-       hwmods = kmemdup(ohs, sizeof(struct omap_hwmod *) * oh_cnt, GFP_KERNEL);
+       hwmods = kmemdup(ohs,array_size( sizeof(*ohs), oh_cnt), GFP_KERNEL);
        if (!hwmods)
                goto oda_exit2;
…


Would you like to clarify pretty-printing concerns?

Regards,
Markus
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci

Reply via email to