2019-10-30 14:15:50

by Liu Xiang

[permalink] [raw]
Subject: [PATCH] lib: string: reduce unnecessary loop in strncpy

Now in strncpy, even src[0] is 0, loop will execute count times until
count is 0. It is better to exit the loop immediately when *src is 0.

Signed-off-by: Liu Xiang <[email protected]>
---
lib/string.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/lib/string.c b/lib/string.c
index 08ec58c..1065352 100644
--- a/lib/string.c
+++ b/lib/string.c
@@ -115,12 +115,8 @@ char *strncpy(char *dest, const char *src, size_t count)
{
char *tmp = dest;

- while (count) {
- if ((*tmp = *src) != 0)
- src++;
- tmp++;
- count--;
- }
+ while (count-- && (*tmp++ = *src++) != '\0')
+ ; /* nothing */
return dest;
}
EXPORT_SYMBOL(strncpy);
--
1.9.1


2019-10-30 15:01:46

by Rasmus Villemoes

[permalink] [raw]
Subject: Re: [PATCH] lib: string: reduce unnecessary loop in strncpy

On 30/10/2019 15.14, Liu Xiang wrote:
> Now in strncpy, even src[0] is 0, loop will execute count times until
> count is 0. It is better to exit the loop immediately when *src is 0.

Please read "man strncpy".

There's a reason the loop is written in that somewhat convoluted way:
The behavior of strncpy is mandated by the C standard, and if the src
string is shorter than the destination buffer, the rest must be
0-filled. So if we hit a nul byte before running out of count, we keep
copying that nul byte to the rest of the destination.

Rasmus

2019-10-31 02:32:45

by Liu Xiang

[permalink] [raw]
Subject: Re:Re: [PATCH] lib: string: reduce unnecessary loop in strncpy











At 2019-10-30 22:59:58, "Rasmus Villemoes" <[email protected]> wrote:
>On 30/10/2019 15.14, Liu Xiang wrote:
>> Now in strncpy, even src[0] is 0, loop will execute count times until
>> count is 0. It is better to exit the loop immediately when *src is 0.
>
>Please read "man strncpy".
>
>There's a reason the loop is written in that somewhat convoluted way:
>The behavior of strncpy is mandated by the C standard, and if the src
>string is shorter than the destination buffer, the rest must be
>0-filled. So if we hit a nul byte before running out of count, we keep
>copying that nul byte to the rest of the destination.
>
>Rasmus

Hi Rasmus,

Thanks for your explanation. I ignored the C library standard.

Regards

Liu Xiang