[systemd-devel] [PATCH] Replace hasprefix() with startswith()
Kay Sievers
kay at vrfy.org
Wed Aug 21 09:58:35 PDT 2013
On Wed, Aug 21, 2013 at 6:53 PM, WANG Chao <chaowang at redhat.com> wrote:
> On 08/21/13 at 12:05pm, Kay Sievers wrote:
>> On Wed, Aug 21, 2013 at 8:36 AM, WANG Chao <chaowang at redhat.com> wrote:
>>
>> > --- a/TODO
>> > +++ b/TODO
>> > @@ -96,8 +96,6 @@ Features:
>> >
>> > -* do we really need both hasprefix() and startswith()?
>>
>> It needs a little bit more:
>> - the open-coded startswith seems really slow, it should not get more users
>> - hasprefix can no longer be compile-time optimized, which is not good
>
> Apart from the overflow issue hasprefix has, may I ask why hasprefix
> can't be complile-time optimized now? What changed?
Your patch replaced hasprefix with startswith. hasprefix was just a
define, it operated on static strings with static length, which the
compiler can optimize away. startswith is an open-coded function with
a counter, which has to be called and cannot really be optimized-away
by the compiler.
>> We might want something like this:
>> http://lists.freedesktop.org/archives/systemd-devel/2013-July/011860.html
>
> It looks like Lennart has already figured out an optimized startswith:
>
> #define startswith(s, prefix) ({ \
> size_t _l; \
> _l = strlen(prefix); \
> strncmp(s, prefix, _l) == 0 ? s + _l : NULL; \
> })
>
> IMHO, using strncmp() is fast enough. What do you think?
strncmp sounds fine instead of the open-coded loop in hasprefix, yes.
Kay
More information about the systemd-devel
mailing list