make GNUNET_strlcpy more flexible by using strnlen instead of strlen
authorlurchi <lurchi@strangeplace.net>
Thu, 27 Jun 2019 09:37:34 +0000 (11:37 +0200)
committerlurchi <lurchi@strangeplace.net>
Thu, 27 Jun 2019 09:41:40 +0000 (11:41 +0200)
src/exit/gnunet-helper-exit-windows.c
src/util/strings.c
src/vpn/gnunet-helper-vpn-windows.c

index 85a06c53910ad4ff6c01acdc56b1b57afdcefd24..2e4b5f4a2bec5a3a50a72bd6b6de3ee51696802b 100644 (file)
@@ -252,15 +252,12 @@ typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
 
 
 /**
- * Like strlcpy but portable. The given string @a src is copied in full length
- * (until its null byte). The destination buffer is guaranteed to be
- * null-terminated.
+ * Like strlcpy but portable. The given string @a src is copied until its null
+ * byte or until @a n - 1 bytes have been read. The destination buffer is
+ * guaranteed to be null-terminated.
  *
- * to a destination buffer
- * and ensures that the destination string is null-terminated.
- *
- * @param dst destination of the copy
- * @param src source of the copy, must be null-terminated
+ * @param dst destination of the copy (must be @a n bytes long)
+ * @param src source of the copy (at most @a n - 1 bytes will be read)
  * @param n the length of the string to copy, including its terminating null
  *          byte
  * @return the length of the string that was copied, excluding the terminating
@@ -273,11 +270,10 @@ GNUNET_strlcpy(char *dst, const char *src, size_t n)
   size_t slen;
 
   GNUNET_assert (0 != n);
-  ret = strlen (src);
-  slen = GNUNET_MIN (ret, n - 1);
+  slen = strnlen (src, n - 1);
   memcpy (dst, src, slen);
   dst[slen] = '\0';
-  return ret;
+  return slen;
 }
 
 
index ae05442967afb8db4d1de01e7cffd22f76f708bb..d83c36ef8862d83fb6a262441c5b1689d347cac2 100644 (file)
@@ -203,15 +203,12 @@ GNUNET_STRINGS_byte_size_fancy (unsigned long long size)
 
 
 /**
- * Like strlcpy but portable. The given string @a src is copied in full length
- * (until its null byte). The destination buffer is guaranteed to be
- * null-terminated.
+ * Like strlcpy but portable. The given string @a src is copied until its null
+ * byte or until @a n - 1 bytes have been read. The destination buffer is
+ * guaranteed to be null-terminated.
  *
- * to a destination buffer
- * and ensures that the destination string is null-terminated.
- *
- * @param dst destination of the copy
- * @param src source of the copy, must be null-terminated
+ * @param dst destination of the copy (must be @a n bytes long)
+ * @param src source of the copy (at most @a n - 1 bytes will be read)
  * @param n the length of the string to copy, including its terminating null
  *          byte
  * @return the length of the string that was copied, excluding the terminating
@@ -224,11 +221,10 @@ GNUNET_strlcpy(char *dst, const char *src, size_t n)
   size_t slen;
 
   GNUNET_assert (0 != n);
-  ret = strlen (src);
-  slen = GNUNET_MIN (ret, n - 1);
+  slen = strnlen (src, n - 1);
   memcpy (dst, src, slen);
   dst[slen] = '\0';
-  return ret;
+  return slen;
 }
 
 
index ea4d3034722d097d5f4e5163d238053cf8f77b4e..ab72d71aa47c6385772afc0fbcfa219a7d41e81e 100644 (file)
@@ -252,15 +252,12 @@ typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
 
 
 /**
- * Like strlcpy but portable. The given string @a src is copied in full length
- * (until its null byte). The destination buffer is guaranteed to be
- * null-terminated.
+ * Like strlcpy but portable. The given string @a src is copied until its null
+ * byte or until @a n - 1 bytes have been read. The destination buffer is
+ * guaranteed to be null-terminated.
  *
- * to a destination buffer
- * and ensures that the destination string is null-terminated.
- *
- * @param dst destination of the copy
- * @param src source of the copy, must be null-terminated
+ * @param dst destination of the copy (must be @a n bytes long)
+ * @param src source of the copy (at most @a n - 1 bytes will be read)
  * @param n the length of the string to copy, including its terminating null
  *          byte
  * @return the length of the string that was copied, excluding the terminating
@@ -273,11 +270,10 @@ GNUNET_strlcpy(char *dst, const char *src, size_t n)
   size_t slen;
 
   GNUNET_assert (0 != n);
-  ret = strlen (src);
-  slen = GNUNET_MIN (ret, n - 1);
+  slen = strnlen (src, n - 1);
   memcpy (dst, src, slen);
   dst[slen] = '\0';
-  return ret;
+  return slen;
 }