From: julia.lawall@lip6.fr (Julia Lawall)
To: cocci@systeme.lip6.fr
Subject: [Cocci] Matching format strings
Date: Thu, 29 Jun 2017 14:07:58 -0600 (MDT) [thread overview]
Message-ID: <alpine.DEB.2.20.1706291406370.2989@hadrien> (raw)
In-Reply-To: <20170629175852.trzk7w6nwxswzi5x@eos.mistotebe.net>
On Thu, 29 Jun 2017, Ond?ej Kuzn?k wrote:
> On Thu, Jun 29, 2017 at 10:31:43AM -0600, Julia Lawall wrote:
> >
> >
> > On Thu, 29 Jun 2017, Ond?ej Kuzn?k wrote:
> >
> >> Hi all,
> >> I'm looking into what's needed to replace OpenLDAP's debug macro
> >> implementation which at the moment always takes 3 arguments:
> >>
> >> Debug(LEVEL, "format", arg1, arg2, arg3);
> >>
> >> to something more useful (and get rid of the obvious compiler warnings
> >> we get from doing things like that).
> >>
> >> There are two (or three) cases I need to handle where I hope coccinelle
> >> would be able to help:
> >>
> >> 1. Where less than three arguments are needed, they are always filled
> >> with zeros:
> >>
> >> Debug(level, "text with less than three format specifiers", 0, 0, 0);
> >>
> >> We want to change that to
> >>
> >> Debug( level, "format" );
> >>
> >> or equivalent. This is by far the most common one. But obviously where
> >> we have zeros as arguments, but there is a corresponding % format
> >> specifier, we don't want to drop those.
> >
> > See demos/format.cocci. So you could have somthing like
> >
> > @@
> > format d;
> > expression level,str;
> > @@
> >
> > (
> > Debug(level,"...%@d at ...",0,0,0)
> > |
> > - Debug(level,str,0,0,0)
> > + Debug(level,str)
> > )
>
> Sweet! I missed that one, this should save me loads of time :)
>
> Using Debian Stretch at the moment and format.cocci doesn't seem to
> generate the correct patch, it outputs
>
> --- format.c
> +++ /tmp/cocci-output-16488-ebe9ee-format.c
> @@ -3,5 +3,5 @@ int main () {
> foo("blah %d two %2x three %s xxx %d");
> foo("xyz %d %d %0.2f %s three\n");
> foo("xyz %d %0.2f abc");
> - foo("xxx %s");
> + foo("yyy %@d@");
> }
>
> instead, is that a known issue in that version (as in, should I use
> latest git)?
Use the version from github.
I will answer the rest shortly.
julia
>
> >> 2. When more are needed, usually the code looks like this:
> >>
> >> snprintf( buffer, size, "format", ... );
> >> Debug( level, "text: %s\n", buffer, ... );
> >>
> >> We'd like to change that to:
> >>
> >> Debug( level, "new format", merged arguments );
> >>
> >> There are fewer of those but still too many for a human to maintain
> >> while we discuss the merits of this change on openldap-devel with
> >> regards to C89, old compilers and stuff like that :)
> >>
> >> 2a. There might be a place that reuses the buffer contents, but that's
> >> easy to check for I guess?
> >
> > I'm not sure to understand what is wanted here.
>
> One of the more complicated examples is here https://github.com/openldap/openldap/blob/master/servers/slapd/back-meta/search.c#L302-L311
>
> I would need to be able to convert
>
> char buf[ SLAP_TEXT_BUFLEN ];
> snprintf( buf, sizeof( buf ),
> "retrying URI=\"%s\" DN=\"%s\"",
> mt->mt_uri,
> BER_BVISNULL( &msc->msc_bound_ndn ) ?
> "" : msc->msc_bound_ndn.bv_val );
>
> Debug( LDAP_DEBUG_ANY,
> "%s meta_search_dobind_init[%d]: %s.\n",
> op->o_log_prefix, candidate, buf );
>
> into
>
> Debug( LDAP_DEBUG_ANY,
> "%s meta_search_dobind_init[%d]: "
> "retrying URI=\"%s\" DN=\"%s\""
> ".\n",
> op->o_log_prefix, candidate, buf,
> mt->mt_uri,
> BER_BVISNULL( &msc->msc_bound_ndn ) ?
> "" : msc->msc_bound_ndn.bv_val );
>
> or equivalent.
>
> I'll play around with the format string support a bit, but does it make
> the above possible out of the box without extra python code?
>
> The one I might want to be able to skip converting is
> https://github.com/openldap/openldap/blob/master/servers/slapd/config.c#L801
> since the buffer is used repeatedly. But I think I might be able to pull
> that off.
>
> > You can indeed also use python. Perhaps a metavariable like the following
> > would be helpful:
> >
> > constant char[] x : script:python() { ok_string(x) };
> >
> > ok_string should be defined at the top of the file in
> >
> > @initialize:python@
> > @@
> >
> > def ok_string ...
> >
> > julia
>
> --
> Ond?ej Kuzn?k
> Senior Software Engineer
> Symas Corporation http://www.symas.com
> Packaged, certified, and supported LDAP solutions powered by OpenLDAP
>
next prev parent reply other threads:[~2017-06-29 20:07 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-29 16:04 [Cocci] Matching format strings Ondřej Kuzník
2017-06-29 16:31 ` Julia Lawall
[not found] ` <WM!fa141e32a0b1e5356bb136cefca80be54d02a269aa1d5e1c1d01b9dd1e9da14f2f9fffdc08676c298a48132a86f2037e!@mailstronghold-1.zmailcloud.com>
2017-06-29 17:58 ` Ondřej Kuzník
2017-06-29 20:07 ` Julia Lawall [this message]
2017-06-29 23:40 ` Julia Lawall
[not found] ` <WM!a6114e049b67df39e40551cd95bf5d65e432ff2f8c0445b0273a6b12349ae6346924a09e4c027fdcc87febe26a5e6a4e!@mailstronghold-2.zmailcloud.com>
[not found] ` <20170630135727.lyjp7ayalzxf73jf@eos.mistotebe.net>
2017-07-04 13:22 ` Ondřej Kuzník
2017-07-04 13:32 ` Julia Lawall
[not found] ` <WM!8666006bd8d2547072f2aaa49a217ebee942918ea85a26184b30aa0c245a807e35f125c1045776851fe6d85360d3ed76!@mailstronghold-3.zmailcloud.com>
2017-07-04 13:50 ` Ondřej Kuzník
2017-07-04 13:53 ` Julia Lawall
[not found] ` <WM!65159de96edf810da1e56d42962da09a256f7f76b7d8eab05109b214b5dc8c18f88b6a34ac273725a5e7afd1a6bed1d7!@mailstronghold-2.zmailcloud.com>
2017-07-04 15:11 ` Ondřej Kuzník
2017-07-04 15:25 ` Julia Lawall
[not found] ` <WM!e764e7a6685d1e3af9c59f905772f1c4a8db9db4c655054ccb07f1b8485096c0979716269a6920eeac860b62d25a700e!@mailstronghold-2.zmailcloud.com>
2017-07-04 16:01 ` Ondřej Kuzník
2017-07-04 16:09 ` Julia Lawall
[not found] ` <WM!cc508729d042cf12207adee814670b88c105ae73cdaf601fdeb9c3e26fa32e7df0d4d49f847a216810550421de0d8de6!@mailstronghold-3.zmailcloud.com>
2017-07-04 16:27 ` Ondřej Kuzník
2017-07-04 16:40 ` Julia Lawall
[not found] ` <WM!eb7db9be9e260b8b332afe997cbb4412d355372680c68c06376375f785c138afeda43804b4aaff43c0242a17ff2d826f!@mailstronghold-3.zmailcloud.com>
2017-07-04 16:56 ` Ondřej Kuzník
2017-07-04 16:59 ` Julia Lawall
[not found] ` <WM!6445a14b41a047e62e6e93d9a0da969d5ea2daf83555655349684d54f3d26f5ca8795d092a053f4ee93c2a22f577a788!@mailstronghold-1.zmailcloud.com>
2017-07-04 17:46 ` Ondřej Kuzník
2017-07-04 17:53 ` Julia Lawall
[not found] ` <WM!afea88a820c9c853667fab8a120e0e62e64bc1c9aacab0e42f4149cedda4906e7b85ddc1f742afe16ea78098b42a61f6!@mailstronghold-3.zmailcloud.com>
2017-07-04 19:17 ` Ondřej Kuzník
2017-07-04 21:05 ` Julia Lawall
2017-07-04 21:09 ` Julia Lawall
2017-07-05 12:20 ` Julia Lawall
[not found] ` <WM!da212a33f363d5e8666de4eea7afef6ff657b4ba0eea72f6c914a365ab717eec189b136e17bf2c01cc76cdde89f25962!@mailstronghold-2.zmailcloud.com>
2017-07-05 16:25 ` Ondřej Kuzník
2017-07-05 18:33 ` Julia Lawall
2017-07-05 18:39 ` Julia Lawall
2017-07-05 20:38 ` Julia Lawall
[not found] ` <WM!3b412209b28e186e2cf1ceaaa46d40e6d1947012ed574b129f9c461a255f53e26f88920405ecdf4a7d052d70724bc64e!@mailstronghold-2.zmailcloud.com>
2017-07-10 16:12 ` Ondřej Kuzník
2017-07-10 16:18 ` Julia Lawall
[not found] ` <WM!18ce1dcc914ca4f9b61f6c3aaf891296df9651e3b4d79666e0682dd2ff392a761c732ee0cf4f6500e93b392f83991daf!@mailstronghold-1.zmailcloud.com>
2017-07-10 16:28 ` Ondřej Kuzník
2017-07-10 17:26 ` Julia Lawall
[not found] ` <WM!5b84796296144341d624902eddc2fab8cb72294094f53296fafa12642d6a73a74f5216fe1a48aa1018fdaf2162eca726!@mailstronghold-2.zmailcloud.com>
2017-07-11 13:06 ` Ondřej Kuzník
2017-07-11 13:10 ` Julia Lawall
[not found] ` <WM!c47e11010083686c9aadfde329eb4f31090053d095a60ac9df8bbc8224796e493af84b1948709a4b0a11aa0da4f34967!@mailstronghold-2.zmailcloud.com>
2017-07-11 14:25 ` Ondřej Kuzník
2017-07-11 19:24 ` Julia Lawall
[not found] ` <WM!722e339a1005fef2c134dd9ac0ae6a397244b31d97d213bd70f018388df0843856b835981db31cfffbbceb8ea4d36bdf!@mailstronghold-2.zmailcloud.com>
2017-07-11 22:05 ` Ondřej Kuzník
2017-07-11 22:17 ` Ondřej Kuzník
2017-07-12 5:48 ` Julia Lawall
2017-07-04 16:25 ` Julia Lawall
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.20.1706291406370.2989@hadrien \
--to=julia.lawall@lip6.fr \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.