Merge pull request #9345 from bergzand/pr/fmt/strnlen

fmt: Add fmt_strnlen function
This commit is contained in:
Cenk Gündoğan 2018-06-18 11:23:53 +02:00 committed by GitHub
commit 4219ec9265
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 0 deletions

View File

@ -83,6 +83,15 @@ size_t fmt_strlen(const char *str)
return (tmp - str);
}
size_t fmt_strnlen(const char *str, size_t maxlen)
{
const char *tmp = str;
while(*tmp && maxlen--) {
tmp++;
}
return (tmp - str);
}
size_t fmt_str(char *out, const char *str)
{
int len = 0;

View File

@ -294,6 +294,17 @@ size_t fmt_float(char *out, float f, unsigned precision);
*/
size_t fmt_strlen(const char *str);
/**
* @brief Count at most @p maxlen characters until '\0' (exclusive) in @p str
*
* @param[in] str Pointer to string
* @param[in] maxlen Maximum number of chars to count
*
* @return nr of characters in string @p str points to, or @p maxlen if no
* null terminator is found within @p maxlen chars
*/
size_t fmt_strnlen(const char *str, size_t maxlen);
/**
* @brief Copy null-terminated string (excluding terminating \0)
*

View File

@ -704,6 +704,17 @@ static void test_fmt_strlen(void)
TEST_ASSERT_EQUAL_INT(21, fmt_strlen(long_str));
}
static void test_fmt_strnlen(void)
{
const char *empty_str = "";
const char *short_str = "short";
const char *long_str = "this is a long string";
TEST_ASSERT_EQUAL_INT(0, fmt_strnlen(empty_str, 16));
TEST_ASSERT_EQUAL_INT(5, fmt_strnlen(short_str, 16));
TEST_ASSERT_EQUAL_INT(16, fmt_strnlen(long_str, 16));
}
static void test_fmt_str(void)
{
const char *string1 = "string1";
@ -778,6 +789,7 @@ Test *tests_fmt_tests(void)
new_TestFixture(test_fmt_s16_dfp),
new_TestFixture(test_fmt_s32_dfp),
new_TestFixture(test_fmt_strlen),
new_TestFixture(test_fmt_strnlen),
new_TestFixture(test_fmt_str),
new_TestFixture(test_scn_u32_dec),
new_TestFixture(test_fmt_lpad),