dde_linux: streamline strlcpy/strlcat implementations

This commit is contained in:
Christian Helmuth 2018-08-20 14:03:25 +02:00
parent ce414a5c5a
commit 44a8bec56a
3 changed files with 15 additions and 12 deletions

View File

@ -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);

View File

@ -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;
}

View File

@ -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);