From: Paul Clarke
> Sent: 14 June 2018 14:18
...
> > +   /* Remove trailing newline from sysfs file */
> > +   cp = strrchr(buf, '\n');
> > +   if (cp)
> > +           *cp = '\0';
> 
> A nit, perhaps, but this will search backwards through the entire string if a 
> newline is not found,
> which is the most common case, I presume.  Would it be more efficient to just 
> look at the last
> character?  Something like:
> i = strlen(buf);
> if (i > 0 && buf[i-1] == '\n')
>   buf[i-1] = '\0';

Worse it will do horrid things of the output has multiple lines of text
without a newline at the end.

Both strlen() and strrhr() need to scan the entire string.
However since strlen is only looking for one value it should be much
more efficient - especially on 64bit systems where shifts and bit
operations can be used to find the 64bit word containing the first
zero byte.

I suspect rtrim() has an extra data cache miss.

        David

Reply via email to