cocci.inria.fr archive mirror
 help / color / mirror / Atom feed
From: Julia Lawall <julia.lawall@inria.fr>
To: Thomas Adam <thomas@xteddy.org>
Cc: cocci@systeme.lip6.fr
Subject: Re: [Cocci] Using cocci to mangle function arguments
Date: Sun, 17 May 2020 10:07:29 +0200 (CEST)	[thread overview]
Message-ID: <alpine.DEB.2.21.2005171002330.2822@hadrien> (raw)
In-Reply-To: <20200517001646.gtobyv6jea5bugfr@debian>



On Sun, 17 May 2020, Thomas Adam wrote:

> Hi all,
>
> I have a situation where I'm trying to use Coccinelle to both rename one
> function to another, and at the same time modify the number of arguments.
>
> I have a function called:
>
>     func_old(ERR, "func_name", "%s message", charstring);
>
> Which is therefore variadic.  In terms of argument ordering func_old() takes:
>
>   1.  log-level type
>   2.  the calling function
>   3.  A variadic string
>
> I'm wanting to replace func_old() with func_new() such that it looks like
> this:
>
>     func_new("%s: %s message", __func__, charstring);
>
> Hence, func_new() reduces the number of arguments to just one -- a format
> string, and variadic arguments.
>
> My question is how would I go about trying to get coccinelle to help me
> translate this?  Is this even possible?  I have tried:
>
> @@
> expression O1, O2, O3
> @@
>
> - func_old(O1, O2, O3, ...);
>
> But I don't know how to convert what would be O2 to '__func__'.  When calling
> func_new(), there is no explicit O2 parameter from func_old(), it should be
> part of the format string, hence:
>
> + func_new("%s: ...", __func__, O3);
>
> I suspect I might be stretching coccinelle's abilities in trying to craft new
> parameters, but I thought I'd ask.

I'm not sure to completely understand the problem.  Is it that O1 is
always an explicit string and you want to add %s: at the beginning of that
string?

If you require O1 to be an explicit string, it would be better to declare
it as:

constant char[] O1;

For creating the new string, you can use python.  Check
demos/pythontococci.cocci.  Basically, you need to play with the data you
are given in the python code to create the string that you want.
According to the example, when you use it in the final SmPL rule that
creates the new code, you will call it an identifier, even though it is a
string.  But it doesn't matter.

There is a more clean way to do this with some make_expr function, but
there doens't seem to be a convenient demo for it.

julia


>
> Apologies if this is convoluted.  If I can help answer any additional
> questions, or if something's not clear, let me know.
>
> TIA!
>
> Thomas
> _______________________________________________
> Cocci mailing list
> Cocci@systeme.lip6.fr
> https://systeme.lip6.fr/mailman/listinfo/cocci
>
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci

      reply	other threads:[~2020-05-17  8:07 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-17  0:16 [Cocci] Using cocci to mangle function arguments Thomas Adam
2020-05-17  8:07 ` Julia Lawall [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=alpine.DEB.2.21.2005171002330.2822@hadrien \
    --to=julia.lawall@inria.fr \
    --cc=cocci@systeme.lip6.fr \
    --cc=thomas@xteddy.org \
    /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;
as well as URLs for NNTP newsgroup(s).