From: lars@metafoo.de (Lars-Peter Clausen)
To: cocci@systeme.lip6.fr
Subject: [Cocci] how to consider castings in semantic patchs
Date: Wed, 13 Mar 2013 09:49:46 +0100 [thread overview]
Message-ID: <51403DAA.3060102@metafoo.de> (raw)
In-Reply-To: <CAHCmPpPznDVsBwcPVhgrBwq1ejBt7i7U8WDj3+iCoBjsBnGm4Q@mail.gmail.com>
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
prev parent reply other threads:[~2013-03-13 8:49 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-12 13:51 [Cocci] how to consider castings in semantic patchs Andrés More
2013-03-13 8:43 ` Julia Lawall
2013-03-13 8:49 ` Lars-Peter Clausen [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51403DAA.3060102@metafoo.de \
--to=lars@metafoo.de \
--cc=cocci@systeme.lip6.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox