]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Add rspamd_null_safe_copy routine
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 7 Feb 2019 15:47:16 +0000 (15:47 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 7 Feb 2019 15:47:16 +0000 (15:47 +0000)
src/libutil/str_util.c
src/libutil/str_util.h

index 7078415d32b9e2f3ea9c788f42e0e7bf91cff624..25c88acee0b0abd79543cbd82199af4a8b6bd859 100644 (file)
@@ -391,6 +391,32 @@ rspamd_strlcpy_fast (gchar *dst, const gchar *src, gsize siz)
        return (d - dst);
 }
 
+gsize
+rspamd_null_safe_copy (const gchar *src, gsize srclen,
+                                          gchar *dest, gsize destlen)
+{
+       gsize copied = 0, si = 0, di = 0;
+
+       if (destlen == 0) {
+               return 0;
+       }
+
+       while (si < srclen && di + 1 < destlen) {
+               if (src[si] != '\0') {
+                       dest[di++] = src[si++];
+                       copied ++;
+               }
+               else {
+                       si ++;
+               }
+       }
+
+       dest[di] = '\0';
+
+       return copied;
+}
+
+
 size_t
 rspamd_strlcpy_safe (gchar *dst, const gchar *src, gsize siz)
 {
index 72e0ab56f3da40ae3824875bf3babafe4b22e9a8..46b74001bf338f53f7b639abf8eda09deb65dc20 100644 (file)
@@ -89,6 +89,18 @@ gsize rspamd_strlcpy_safe (gchar *dst, const gchar *src, gsize siz);
 #  define rspamd_strlcpy rspamd_strlcpy_fast
 #endif
 
+/**
+ * Copies `srclen` characters from `src` to `dst` ignoring \0
+ * @param src
+ * @param srclen
+ * @param dest
+ * @param destlen
+ * @return number of bytes copied
+ */
+gsize
+rspamd_null_safe_copy (const gchar *src, gsize srclen,
+                                          gchar *dest, gsize destlen);
+
 /*
  * Try to convert string of length to long
  */