From 44a8bec56a7b7d7af528aa7e70211ac0fbfb9a13 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Mon, 20 Aug 2018 14:03:25 +0200 Subject: [PATCH] dde_linux: streamline strlcpy/strlcat implementations --- repos/dde_linux/src/lib/lxip/lxcc_emul.cc | 2 +- repos/dde_linux/src/lib/usb/lx_emul.cc | 23 +++++++++++++---------- repos/dde_linux/src/lib/wifi/lxcc_emul.cc | 2 +- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/repos/dde_linux/src/lib/lxip/lxcc_emul.cc b/repos/dde_linux/src/lib/lxip/lxcc_emul.cc index 36ec1a60a1..ed01f8c1c1 100644 --- a/repos/dde_linux/src/lib/lxip/lxcc_emul.cc +++ b/repos/dde_linux/src/lib/lxip/lxcc_emul.cc @@ -255,7 +255,7 @@ int snprintf(char *str, size_t size, const char *format, ...) size_t strlcpy(char *dest, const char *src, size_t size) { size_t ret = strlen(src); - + if (size) { size_t len = (ret >= size) ? size - 1 : ret; Genode::memcpy(dest, src, len); diff --git a/repos/dde_linux/src/lib/usb/lx_emul.cc b/repos/dde_linux/src/lib/usb/lx_emul.cc index 94f749ed99..97138163c2 100644 --- a/repos/dde_linux/src/lib/usb/lx_emul.cc +++ b/repos/dde_linux/src/lib/usb/lx_emul.cc @@ -215,19 +215,22 @@ int strcmp(const char *s1, const char *s2) size_t strlen(const char *s) { return Genode::strlen(s); } -size_t strlcat(char *dest, const char *src, size_t dest_size) +size_t strlcat(char *dest, const char *src, size_t count) { - size_t len_d = strlen(dest); - size_t len_s = strlen(src); + size_t dsize = strlen(dest); + size_t len = strlen(src); + size_t res = dsize + len; - if (len_d > dest_size) - return 0; + /* This would be a bug */ + BUG_ON(dsize >= count); - size_t len = dest_size - len_d - 1; - - memcpy(dest + len_d, src, len); - dest[len_d + len] = 0; - return len; + dest += dsize; + count -= dsize; + if (len >= count) + len = count-1; + memcpy(dest, src, len); + dest[len] = 0; + return res; } diff --git a/repos/dde_linux/src/lib/wifi/lxcc_emul.cc b/repos/dde_linux/src/lib/wifi/lxcc_emul.cc index 38d4f603c2..28851368a6 100644 --- a/repos/dde_linux/src/lib/wifi/lxcc_emul.cc +++ b/repos/dde_linux/src/lib/wifi/lxcc_emul.cc @@ -119,7 +119,7 @@ char *strcpy(char *dst, const char *src) size_t strlcpy(char *dest, const char *src, size_t size) { size_t ret = strlen(src); - + if (size) { size_t len = (ret >= size) ? size - 1 : ret; Genode::memcpy(dest, src, len);