[liba] Add strlcat

This commit is contained in:
Romain Goyet
2020-02-13 16:04:39 -05:00
committed by Ecco
parent dc4f43eeb0
commit 02a19fc83d
4 changed files with 22 additions and 0 deletions

View File

@@ -19,6 +19,7 @@ liba_src += $(addprefix liba/src/, \
nearbyintf.c \
strcmp.c \
strchr.c \
strlcat.c \
strlcpy.c \
strlen.c \
external/sqlite/mem5.c \

View File

@@ -14,6 +14,7 @@ void * memset(void * b, int c, size_t len);
char * strchr(const char * s, int c);
int strcmp(const char * s1, const char * s2);
int strncmp(const char * s1, const char * s2, size_t n);
size_t strlcat(char * dst, const char * src, size_t dstSize);
size_t strlcpy(char * dst, const char * src, size_t dstSize);
size_t strlen(const char * s);

View File

@@ -1,5 +1,6 @@
#include <string.h>
#if (__GLIBC__ || __MINGW32__)
#include "strlcat.c"
#include "strlcpy.c"
#endif

19
liba/src/strlcat.c Normal file
View File

@@ -0,0 +1,19 @@
#include <string.h>
size_t strlcat(char * dst, const char * src, size_t dstSize) {
const size_t srcLen = strlen(src);
size_t dstLen = strlen(dst);
if (dstLen > dstSize) {
dstLen = dstSize;
}
if (dstLen == dstSize) {
return dstSize+srcLen;
}
if (srcLen < dstSize-dstLen) {
memcpy(dst+dstLen, src, srcLen+1);
} else {
memcpy(dst+dstLen, src, dstSize-1);
dst[dstLen+dstSize-1] = 0;
}
return dstLen+srcLen;
}