Hi Tom,

On Fri, 21 Mar 2025 at 03:15, Tom Rini <tr...@konsulko.com> wrote:
>
> On Thu, Mar 20, 2025 at 03:43:30AM +0000, Simon Glass wrote:
> > Hi Tom,
> >
> > On Wed, 19 Mar 2025 at 16:38, Tom Rini <tr...@konsulko.com> wrote:
> > >
> > > On Wed, Mar 19, 2025 at 03:04:16PM +0000, Simon Glass wrote:
> > > > Hi Tom,
> > > >
> > > > On Wed, 19 Mar 2025 at 15:24, Tom Rini <tr...@konsulko.com> wrote:
> > > > >
> > > > > On Wed, Mar 19, 2025 at 12:59:05PM +0100, Simon Glass wrote:
> > > > >
> > > > > > This function trims whitespace from the start and end of a string. 
> > > > > > Add a
> > > > > > test for it.
> > > > > >
> > > > > > Signed-off-by: Simon Glass <s...@chromium.org>
> > > > > > ---
> > > > > >
> > > > > >  test/lib/string.c | 31 +++++++++++++++++++++++++++++++
> > > > > >  1 file changed, 31 insertions(+)
> > > > >
> > > > > This got me to ask "What even is using strim and where did it come
> > > > > from?". To which the answer is:
> > > > > - A few places, but it's probably reasonable.
> > > > > - Linux, pre-2011.
> > > > >
> > > > > I say the latter because we're missing a bug fix to the strim function
> > > > > that's been there since 2011:
> > > > >
> > > > > commit 66f6958e69d8055277356d3cc2e7a1d734db1755
> > > > > Author: Michael Holzheu <holz...@linux.vnet.ibm.com>
> > > > > Date:   Mon Oct 31 17:12:37 2011 -0700
> > > > >
> > > > >     lib/string.c: fix strim() semantics for strings that have only 
> > > > > blanks
> > > > >
> > > > >     Commit 84c95c9acf0 ("string: on strstrip(), first remove leading 
> > > > > spaces
> > > > >     before running over str") improved  the performance of the strim()
> > > > >     function.
> > > > >
> > > > >     Unfortunately this changed the semantics of strim() and broke my 
> > > > > code.
> > > > >     Before the patch it was possible to use strim() without using the 
> > > > > return
> > > > >     value for removing trailing spaces from strings that had either 
> > > > > only
> > > > >     blanks or only trailing blanks.
> > > > >
> > > > >     Now this does not work any longer for strings that *only* have 
> > > > > blanks.
> > > > >
> > > > >     Before patch: "   " -> ""    (empty string)
> > > > >     After patch:  "   " -> "   " (no change)
> > > > >
> > > > >     I think we should remove your patch to restore the old behavior.
> > > > >
> > > > >     The description (lib/string.c):
> > > > >
> > > > >      * Note that the first trailing whitespace is replaced with a 
> > > > > %NUL-terminator
> > > > >
> > > > >     => The first trailing whitespace of a string that only has 
> > > > > whitespace
> > > > >        characters is the first whitespace
> > > > >
> > > > >     The patch restores the old strim() semantics.
> > > > >
> > > > >     Signed-off-by: Michael Holzheu <holz...@linux.vnet.ibm.com>
> > > > >     Cc: Andre Goddard Rosa <andre.godd...@gmail.com>
> > > > >     Cc: Martin Schwidefsky <schwidef...@de.ibm.com>
> > > > >     Cc: Heiko Carstens <heiko.carst...@de.ibm.com>
> > > > >     Signed-off-by: Andrew Morton <a...@linux-foundation.org>
> > > > >     Signed-off-by: Linus Torvalds <torva...@linux-foundation.org>
> > > > >
> > > > > --
> > > > > Tom
> > > >
> > > > Here is the comment for the function, of note given Linux's disdain
> > > > for commenting code:
> > > >
> > > > /**
> > > >  * strim - Removes leading and trailing whitespace from @s.
> > > >  * @s: The string to be stripped.
> > > >  *
> > > >  * Note that the first trailing whitespace is replaced with a 
> > > > %NUL-terminator
> > > >  * in the given string @s. Returns a pointer to the first non-whitespace
> > > >  * character in @s.
> > > >  */
> > > >
> > > > Given that comment, I don't see a bug here. But of course we could add
> > > > a test for it and adjust the function too. PLMK.
> > >
> > > Did your test add a testcase for the situation described above?
> >
> > No. I didn't know about that case. The function comment does not
> > suggest that it handles a whitespace-only string in that way. In fact,
> > even the Linux commit which changes the behaviour doesn't update the
> > comment to mention that behaviour.
> >
> > Anyway, let me know what you'd like to do.
>
> Well, being a function we borrow from the linux kernel, we should follow
> how it works and backport the trivial change to match how it behaves,
> then add tests in 2/2.

OK.

Regards,
Simon

Reply via email to