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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Feb 24, 2020 at 08:01:36PM +0100, René Scharfe wrote:

> > 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



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux