[Cocci] how to consider castings in semantic patchs

Lars-Peter Clausen
2013-03-13T08:49:46Z

On 03/12/2013 02:51 PM, Andr?s More wrote:
> Hi, I've been playing with Coccinele, I find it really useful.
>
> I'm trying to create a semantic patch to rename a structure (and its
> fields).
> I could get almost everything in place in several patches: the structure
> gets renamed, also variables of that type, also their attributes. However,
> the code (not mine) uses some explicit castings and I couldn't find a way
> to cover those cases also.
>
> I've tried to follow the documented grammar but I think I got lost without
> finding how to declare such castings.
>
> I'm appending the last version of the semantic patch I've been working on
> just to give the rough idea how what I am trying to describe. The code is a
> Linux kernel staging driver (VIA VT6656), using their own Ethernet packet
> struct.
>
> Thanks, I will really appreciate any hints on how to consider explicit
> casting.
>
> -- Andres
>

Hi,

If you typedef PS802_11Header coccinelle will also be able to handle the cast.

@@
typedef PS802_11Header;
@@
-PS802_11Header
+struct ieee80211_hdr

- Lars

> Sample Line not covered
> pMACHeader = (PS802_11Header) (pbyRxBufferAddr + cbHeaderSize);
>
> Semantic patch I could get done
> $ cat test.cocci
> @rule1@
> identifier h;
> @@
> -PSEthernetHeader h;
> +struct ethhdr * h;
>
> @rule2@
> identifier h;
> @@
> -PS802_11Header h;
> +struct ieee80211_hdr *h;
>
> @rule5@
> identifier h;
> @@
> -SEthernetHeader h;
> +struct ethhdr h;
>
> @rule6@
> identifier h;
> @@
> -S802_11Header h;
> +struct ieee80211_hdr h;
>
> @rule3@
> struct ethhdr *h;
> @@
> (
> -h->abyDstAddr
> +h->h_dest
> |
> -h->abySrcAddr
> +h->h_source
> |
> -h->wType
> +h->h_proto
> )
>
> @rule4@
> struct ieee80211_hdr *h;
> @@
> (
> -h->wFrameCtl
> +h->frame_control
> |
> -h->wDurationID
> +h->duration_id
> |
> -h->abyAddr1
> +h->addr1
> |
> -h->abyAddr2
> +h->addr2
> |
> -h->abyAddr3
> +h->addr3
> |
> -h->wSeqCtl
> +h->seq_ctrl
> |
> -h->abyAddr4
> +h->addr4
> )
>
>
>
>
> _______________________________________________
> Cocci mailing list
> Cocci at systeme.lip6.fr
> https://systeme.lip6.fr/mailman/listinfo/cocci