<div dir="ltr"><div style>Hi, I've been playing with Coccinele, I find it really useful.</div><div style><br></div><div style>I'm trying to create a semantic patch to rename a structure (and its fields).</div><div style>

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.</div>

<div style><br></div><div style>I've tried to follow the documented grammar but I think I got lost without finding how to declare such castings. </div><div style><br></div><div style>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.<br>

</div><div><br></div><div>Thanks, I will really appreciate any hints on how to consider explicit casting.</div><div><br></div>-- Andres
<div><br></div><div style>Sample Line not covered</div><div>pMACHeader = (PS802_11Header) (pbyRxBufferAddr + cbHeaderSize);<br></div><div><br></div><div style>Semantic patch I could get done</div><div>$ cat test.cocci<br>

</div><div><div>@rule1@</div><div>identifier h;</div><div>@@</div><div>-PSEthernetHeader h;</div><div>+struct ethhdr * h;</div><div><br></div><div>@rule2@</div><div>identifier h;</div><div>@@</div><div>-PS802_11Header h;</div>

<div>+struct ieee80211_hdr *h;</div><div><br></div><div>@rule5@</div><div>identifier h;</div><div>@@</div><div>-SEthernetHeader h;</div><div>+struct ethhdr h;</div><div><br></div><div>@rule6@</div><div>identifier h;</div>

<div>@@</div><div>-S802_11Header h;</div><div>+struct ieee80211_hdr h;</div><div><br></div><div>@rule3@</div><div>struct ethhdr *h;</div><div>@@</div><div>(</div><div>-h->abyDstAddr</div><div>+h->h_dest</div><div>|</div>

<div>-h->abySrcAddr</div><div>+h->h_source</div><div>|</div><div>-h->wType</div><div>+h->h_proto</div><div>)</div><div><br></div><div>@rule4@</div><div>struct ieee80211_hdr *h;</div><div>@@</div><div>(</div><div>

-h->wFrameCtl</div><div>+h->frame_control</div><div>|</div><div>-h->wDurationID</div><div>+h->duration_id</div><div>|</div><div>-h->abyAddr1</div><div>+h->addr1</div><div>|</div><div>-h->abyAddr2</div>

<div>+h->addr2</div><div>|</div><div>-h->abyAddr3</div><div>+h->addr3</div><div>|</div><div>-h->wSeqCtl</div><div>+h->seq_ctrl</div><div>|</div><div>-h->abyAddr4</div><div>+h->addr4</div><div>)</div>
</div>
<div><br></div></div>