All of lore.kernel.org
 help / color / mirror / Atom feed
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
>

  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.