From a64ef544d98d0a505a78f2871464a19d86d8cdbf Mon Sep 17 00:00:00 2001 From: david gauchard Date: Tue, 23 Jul 2019 11:13:50 +0200 Subject: [PATCH] emulation on host: add missing strlcat strlcpy (#6327) --- tests/host/Makefile | 1 + tests/host/common/mock.h | 3 ++ tests/host/common/strl.cpp | 86 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+) create mode 100644 tests/host/common/strl.cpp diff --git a/tests/host/Makefile b/tests/host/Makefile index 953c1fe24..3768c11b5 100644 --- a/tests/host/Makefile +++ b/tests/host/Makefile @@ -287,6 +287,7 @@ MOCK_ARDUINO_LIBS := $(addprefix common/,\ MockEsp.cpp \ MockEEPROM.cpp \ MockSPI.cpp \ + strl.cpp \ ) CPP_SOURCES_CORE_EMU = \ diff --git a/tests/host/common/mock.h b/tests/host/common/mock.h index 3824b62a4..e61616737 100644 --- a/tests/host/common/mock.h +++ b/tests/host/common/mock.h @@ -37,6 +37,7 @@ #ifdef __cplusplus #include #endif +#include #ifdef __cplusplus @@ -49,6 +50,8 @@ char* ltoa (long val, char *s, int radix); } #endif +size_t strlcat(char *dst, const char *src, size_t size); +size_t strlcpy(char *dst, const char *src, size_t size); // exotic typedefs used in the sdk diff --git a/tests/host/common/strl.cpp b/tests/host/common/strl.cpp new file mode 100644 index 000000000..529b9a1ed --- /dev/null +++ b/tests/host/common/strl.cpp @@ -0,0 +1,86 @@ +// https://gist.github.com/Fonger/98cc95ac39fbe1a7e4d9 + +#ifndef HAVE_STRLCAT +/* + '_cups_strlcat()' - Safely concatenate two strings. +*/ + +size_t /* O - Length of string */ +strlcat(char *dst, /* O - Destination string */ + const char *src, /* I - Source string */ + size_t size) /* I - Size of destination string buffer */ +{ + size_t srclen; /* Length of source string */ + size_t dstlen; /* Length of destination string */ + + + /* + Figure out how much room is left... + */ + + dstlen = strlen(dst); + size -= dstlen + 1; + + if (!size) + { + return (dstlen); /* No room, return immediately... */ + } + + /* + Figure out how much room is needed... + */ + + srclen = strlen(src); + + /* + Copy the appropriate amount... + */ + + if (srclen > size) + { + srclen = size; + } + + memcpy(dst + dstlen, src, srclen); + dst[dstlen + srclen] = '\0'; + + return (dstlen + srclen); +} +#endif /* !HAVE_STRLCAT */ + +#ifndef HAVE_STRLCPY +/* + '_cups_strlcpy()' - Safely copy two strings. +*/ + +size_t /* O - Length of string */ +strlcpy(char *dst, /* O - Destination string */ + const char *src, /* I - Source string */ + size_t size) /* I - Size of destination string buffer */ +{ + size_t srclen; /* Length of source string */ + + + /* + Figure out how much room is needed... + */ + + size --; + + srclen = strlen(src); + + /* + Copy the appropriate amount... + */ + + if (srclen > size) + { + srclen = size; + } + + memcpy(dst, src, srclen); + dst[srclen] = '\0'; + + return (srclen); +} +#endif /* !HAVE_STRLCPY */