* @param dest Buffer for the result
* @param src String to copy
* @param dlen Length of buffer
- * @retval ptr Destination buffer
+ * @retval len Destination string length
*/
-char *mutt_str_strfcpy(char *dest, const char *src, size_t dlen)
+size_t mutt_str_strfcpy(char *dest, const char *src, size_t dlen)
{
char *dest0 = dest;
while ((--dlen > 0) && (*src != '\0'))
*dest++ = *src++;
*dest = '\0';
- return dest0;
+ return dest - dest0;
}
/**
int mutt_str_strcmp(const char *a, const char *b);
int mutt_str_strcoll(const char *a, const char *b);
char * mutt_str_strdup(const char *s);
-char * mutt_str_strfcpy(char *dest, const char *src, size_t dlen);
+size_t mutt_str_strfcpy(char *dest, const char *src, size_t dlen);
const char *mutt_str_stristr(const char *haystack, const char *needle);
size_t mutt_str_strlen(const char *a);
char * mutt_str_strlower(char *s);
NEOMUTT_TEST_ITEM(test_rfc2047) \
NEOMUTT_TEST_ITEM(test_md5) \
NEOMUTT_TEST_ITEM(test_md5_ctx) \
- NEOMUTT_TEST_ITEM(test_md5_ctx_bytes)
+ NEOMUTT_TEST_ITEM(test_md5_ctx_bytes) \
+ NEOMUTT_TEST_ITEM(test_string_strfcpy)
/******************************************************************************
* You probably don't need to touch what follows.
--- /dev/null
+#define TEST_NO_MAIN
+#include "acutest.h"
+
+#include "mutt/string2.h"
+
+void test_string_strfcpy(void)
+{
+ char src[20] = "\0";
+ char dst[10];
+
+ { /* empty */
+ size_t len = mutt_str_strfcpy(dst, src, sizeof(dst));
+ if (!TEST_CHECK(len == 0))
+ {
+ TEST_MSG("Expected: %zu", 0);
+ TEST_MSG("Actual : %zu", len);
+ }
+ }
+
+ { /* normal */
+ const char trial[] = "Hello";
+ mutt_str_strfcpy(src, trial, sizeof(src)); /* let's eat our own dogfood */
+ size_t len = mutt_str_strfcpy(dst, src, sizeof(dst));
+ if (!TEST_CHECK(len == sizeof(trial) - 1))
+ {
+ TEST_MSG("Expected: %zu", sizeof(trial) - 1);
+ TEST_MSG("Actual : %zu", len);
+ }
+ if (!TEST_CHECK(strcmp(dst, trial) == 0))
+ {
+ TEST_MSG("Expected: %s", trial);
+ TEST_MSG("Actual : %s", dst);
+ }
+ }
+
+ { /* too long */
+ const char trial[] = "Hello Hello Hello";
+ mutt_str_strfcpy(src, trial, sizeof(src));
+ size_t len = mutt_str_strfcpy(dst, src, sizeof(dst));
+ if (!TEST_CHECK(len == sizeof(dst) - 1))
+ {
+ TEST_MSG("Expected: %zu", sizeof(dst) - 1);
+ TEST_MSG("Actual : %zu", len);
+ }
+ }
+}