[PATCH] libbb/last_char_is: rewrite for smaller and faster code

Xabier Oneca -- xOneca xoneca at gmail.com
Fri Jul 3 16:13:32 UTC 2020


Hi all,

> >On Fri, 2020-07-03 at 08:12 +0200, Tito wrote:
> >[...]
> >> Improved version:
> >>
> >> char* last_char_is(const char *s, int c)  {
> >>      if (!s || !*s) return NULL;
> >>      while (*(s + 1))s++;
> >>      return (c == *s) ? (char *)s : NULL;
> >> }

Let me "improve" the Tito's -11 bytes, probably introducing some subtle bug :)

char* FAST_FUNC last_char_is(const char *s, int c)
{
    if (!s || !*s) return NULL;
    while (*(++s));
    return (*(--s) == c) ? s : NULL;
}

function                                             old     new   delta
last_char_is                                          58      42     -16
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-16)             Total: -16 bytes
   text    data     bss     dec     hex filename
 956449    4235    1904  962588   eb01c busybox_old
 956433    4235    1904  962572   eb00c busybox_unstripped

Also, there's a warning compiling this function: return discards
‘const’ qualifier from pointer target type

Fun to play with you.

Cheers,

Xabier Oneca_,,_


More information about the busybox mailing list