diff options
author | 2024-02-18 16:51:05 -0300 | |
---|---|---|
committer | 2024-04-10 23:19:02 +0200 | |
commit | fbffce819e5ac151e137f881b89a9c1da0ebb76c (patch) | |
tree | 70547087330d00a1d215f4d01f018ac0988f5099 | |
parent | tools/nolibc: Fix strlcat() return code and size usage (diff) | |
download | wireguard-linux-fbffce819e5ac151e137f881b89a9c1da0ebb76c.tar.xz wireguard-linux-fbffce819e5ac151e137f881b89a9c1da0ebb76c.zip |
tools/nolibc: Fix strlcpy() return code and size usage
The return code should always be strlen(src), and we should copy at most
size-1 bytes.
While we are there, make sure to null-terminate the dst buffer if we
copied something.
Signed-off-by: Rodrigo Campos <rodrigo@sdfg.com.ar>
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
Diffstat (limited to '')
-rw-r--r-- | tools/include/nolibc/string.h | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/tools/include/nolibc/string.h b/tools/include/nolibc/string.h index cc51fd6b63d0..565230a4ad47 100644 --- a/tools/include/nolibc/string.h +++ b/tools/include/nolibc/string.h @@ -219,16 +219,18 @@ static __attribute__((unused)) size_t strlcpy(char *dst, const char *src, size_t size) { size_t len; - char c; - for (len = 0;;) { - c = src[len]; - if (len < size) - dst[len] = c; - if (!c) - break; - len++; + for (len = 0; len < size; len++) { + dst[len] = src[len]; + if (!dst[len]) + return len; } + if (size) + dst[size-1] = '\0'; + + while (src[len]) + len++; + return len; } |