public inbox for cocci@systeme.lip6.fr
 help / color / mirror / Atom feed
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

      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