git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] use strpbrk(3) to search for characters from a given set

From
Jeff King <peff@peff.net>
Date
Feb 24, 2020, 19:10 UTC
Message-ID
<20200224191001.GA2739722@coredump.intra.peff.net>
In-Reply-To
<21e6eaac-318b-3cb3-bb63-4f65abfae670@web.de>
On Mon, Feb 24, 2020 at 08:01:36PM +0100, René Scharfe wrote:
Show 19 quoted lines
> > The changes in the patch obviously look all correct.
> >
> > I wonder how we can exploit Coccinelle to do this kind of
> > transformations, though.  Would it be possible to say
> >
> >  * if we see "strchr(S, C1) || strchr(S, C2)", transform it to
> >    "strpbrk(S, concat(stringify(C1),stringify(C2)))"; and
> >  * if we see "strpbrk(S, N) || strchr(S, C)", transform it to
> >    "strpbrk(S, concat(N, stringify(C))";
> >
> > and let the tool apply these two rules repeatedly, to catch the
> > pattern to find any number of needle character in the same haystack?
> 
> That would be nice.  I briefly considered it, but I only can think of a
> silly way to convert char literals to strings (by using one rule for
> each possible character value), I don't know how to concatenate strings
> in Coccinelle (simply putting them next to each other as in C doesn't
> seem to work), and I don't know how to apply a rule recursively to allow
> transforming an arbitrarily long chain of strchr() calls. :-/

I suspect you could do it with the python scripting interface of coccinelle. We haven't relied on that so far (since it's technically optional), but I think it would be worth doing if it makes impossible things possible (it also would make some existing very slow things much faster).

As far as the recursive rules, I thought coccinelle would always re-apply rules to the result. So the two that Junio gave above would work (each application of the second one would suck up another strchr). But I also won't be surprised if I'm totally wrong; it wouldn't be the first time I've been puzzled by coccinelle. :)

All that said, I don't plan to spend time on this. And I wouldn't really ask you or anyone to unless they find it fun or interesting. It seems like a lot of poking around for probably not that much benefit.

-Peff
Previous: René Scharfe
Message 6 of 6 in “use strpbrk(3) to search for characters from a given set”
  1. use strpbrk(3) to search for characters from a given setRené Scharfe, Feb 22, 2020
  2. Martin ÅgrenFeb 23, 2020
  3. Jeff KingFeb 24, 2020
  4. Junio C HamanoFeb 24, 2020
  5. René ScharfeFeb 24, 2020
  6. Jeff KingFeb 24, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.