[systemd-devel] [PATCH 1/2] Optimize startswith() to macro

Zbigniew Jędrzejewski-Szmek zbyszek at in.waw.pl
Thu Aug 22 09:35:09 PDT 2013


On Thu, Aug 22, 2013 at 11:03:11PM +0800, WANG Chao wrote:
> On 08/22/13 at 06:53am, Zbigniew Jędrzejewski-Szmek wrote:
> > On Thu, Aug 22, 2013 at 03:52:29AM +0200, Kay Sievers wrote:
> > > On Wed, Aug 21, 2013 at 10:16 PM, Kay Sievers <kay at vrfy.org> wrote:
> > > > On Wed, Aug 21, 2013 at 8:15 PM, WANG Chao <chaowang at redhat.com> wrote:
> > > >> Take this optimized code from Lennart[1]. Now startswith is a macro using
> > > >> strncmp and should be fast enough.
> > > >>
> > > >> [1]: http://lists.freedesktop.org/archives/systemd-devel/2013-July/011860.html
> > > >> ---
> > > >>  src/shared/macro.h |  5 +++++
> > > >>  src/shared/util.c  | 17 -----------------
> > > >>  2 files changed, 5 insertions(+), 17 deletions(-)
> > > >
> > > > It fails to compile, there are the prototypes in util.h still.
> > > > Also quite a few places do not include macro.h ...
> > > >
> > > > I guess it's easier and cleaner anyway to use simple static inline
> > > > functions instead of defines. Patch attached.
> > > 
> > > Zbigniew, mind checking if that patch makes sense?
> > > 
> > > You added the hasprefix a while ago, and you also proposed a version
> > > to unify the both.
> > > We really should get that topic sorted out now. :)
> > Looks correct, pushed this along with Shawn's patch.
> > 
> 
> Hi, guys, I have two more questions:
> 
> - Do we need to update endswith() to be static inline and use strncmp
>   instead of memcmp. It looks better if we put these two functions at
>   the same place (shared/util.h)
Sounds useful.

> - Why not use startswith() instead of first_word()?
first_word is not equivalent: there must be a word boundary after the
word:

src/test/test-util.c:static void test_first_word(void) {
src/test/test-util.c:        assert_se(first_word("Hello", ""));
src/test/test-util.c:        assert_se(first_word("Hello", "Hello"));
src/test/test-util.c:        assert_se(first_word("Hello world", "Hello"));
src/test/test-util.c:        assert_se(first_word("Hello\tworld", "Hello"));
src/test/test-util.c:        assert_se(first_word("Hello\nworld", "Hello"));
src/test/test-util.c:        assert_se(first_word("Hello\rworld", "Hello"));
src/test/test-util.c:        assert_se(first_word("Hello ", "Hello"));
src/test/test-util.c:        assert_se(!first_word("Hello", "Hellooo"));
src/test/test-util.c:        assert_se(!first_word("Hello", "xxxxx"));
src/test/test-util.c:        assert_se(!first_word("Hellooo", "Hello"));

Zbyszek



More information about the systemd-devel mailing list