]> granicus.if.org Git - neomutt/commitdiff
Let mutt_str_strfcpy return the string length, add tests
authorPietro Cerutti <gahr@gahr.ch>
Fri, 26 Jan 2018 11:05:18 +0000 (11:05 +0000)
committerRichard Russon <rich@flatcap.org>
Fri, 26 Jan 2018 14:25:24 +0000 (14:25 +0000)
mutt/string.c
mutt/string2.h
test/Makefile.autosetup
test/main.c
test/string.c [new file with mode: 0644]

index ce4f90879e9030a07d212e426fb992e6b6ea3650..02084452fa59275e846c2252887c5ba7e40298f3 100644 (file)
@@ -675,16 +675,16 @@ void mutt_str_remove_trailing_ws(char *s)
  * @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;
 }
 
 /**
index e0858837e51457c15220fbffd84f6c83d04827f2..d57364bfd1b66eeff35e88dbe40d1f88af2c8f65 100644 (file)
@@ -88,7 +88,7 @@ const char *mutt_str_strchrnul(const char *s, char c);
 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);
index 436392adc960418152bf95ce9e685908163d27ab..9fa92e4c756faa4a6792bc92b8ad3f77c7ccc146 100644 (file)
@@ -1,7 +1,8 @@
 TEST_OBJS   = test/main.o \
              test/base64.o \
              test/rfc2047.o \
-             test/md5.o
+             test/md5.o \
+             test/string.o
 
 TEST_BINARY = test/neomutt-test$(EXEEXT)
 
index 3190d6fbd8251631a5b60fde234d051425461aee..ad74bb77ec9f43f03a9f67df9b66dce3db8f250d 100644 (file)
@@ -10,7 +10,8 @@
   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.
diff --git a/test/string.c b/test/string.c
new file mode 100644 (file)
index 0000000..128e6ae
--- /dev/null
@@ -0,0 +1,46 @@
+#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);
+    }
+  }
+}