aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/memory.c
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2017-01-26 14:33:03 +0100
committerGitHub <noreply@github.com>2017-01-26 14:33:03 +0100
commit59fd0c4132f06a76c460f46ec93fce7b7f1d6f08 (patch)
tree0a6eaf861fa7406c9cd06ffd61dc37e84b051975 /src/nvim/memory.c
parentf78982620a48dc76bbd3635300650d06ced24aab (diff)
downloadrneovim-59fd0c4132f06a76c460f46ec93fce7b7f1d6f08.tar.gz
rneovim-59fd0c4132f06a76c460f46ec93fce7b7f1d6f08.tar.bz2
rneovim-59fd0c4132f06a76c460f46ec93fce7b7f1d6f08.zip
refactor: Remove strncpy/STRNCPY. (#6008)
Closes #731 References #851 Note: This does not remove some intentional legacy usages of strncpy. - memcpy isn't equivalent because it doesn't check the string length of `src`, and doesn't zero-out the remainder of `dst`. - xstrlcpy isn't equivalent because it doesn't zero-out the remainder of `dst`. Some Vim logic depends on that (e.g. ex_append which calls vim_strnsave). Helped-by: Douglas Schneider <ds3@ualberta.ca> Helped-by: oni-link <knil.ino@gmail.com> Helped-by: James McCoy <jamessan@jamessan.com>
Diffstat (limited to 'src/nvim/memory.c')
-rw-r--r--src/nvim/memory.c27
1 files changed, 13 insertions, 14 deletions
diff --git a/src/nvim/memory.c b/src/nvim/memory.c
index 6408ac1664..99d4acf25a 100644
--- a/src/nvim/memory.c
+++ b/src/nvim/memory.c
@@ -364,29 +364,28 @@ char *xstpncpy(char *restrict dst, const char *restrict src, size_t maxlen)
}
}
-/// xstrlcpy - Copy a %NUL terminated string into a sized buffer
+/// xstrlcpy - Copy a NUL-terminated string into a sized buffer
///
-/// Compatible with *BSD strlcpy: the result is always a valid
-/// NUL-terminated string that fits in the buffer (unless,
-/// of course, the buffer size is zero). It does not pad
-/// out the result like strncpy() does.
+/// Compatible with *BSD strlcpy: the result is always a valid NUL-terminated
+/// string that fits in the buffer (unless, of course, the buffer size is
+/// zero). It does not pad out the result like strncpy() does.
///
-/// @param dst Where to copy the string to
-/// @param src Where to copy the string from
-/// @param size Size of destination buffer
-/// @return Length of the source string (i.e.: strlen(src))
+/// @param dst Buffer to store the result
+/// @param src String to be copied
+/// @param size Size of `dst`
+/// @return strlen(src). If retval >= dstsize, truncation occurs.
size_t xstrlcpy(char *restrict dst, const char *restrict src, size_t size)
FUNC_ATTR_NONNULL_ALL
{
- size_t ret = strlen(src);
+ size_t slen = strlen(src);
if (size) {
- size_t len = (ret >= size) ? size - 1 : ret;
+ size_t len = MIN(slen, size - 1);
memcpy(dst, src, len);
dst[len] = '\0';
}
- return ret;
+ return slen; // Does not include NUL.
}
/// xstrlcat - Appends string src to the end of dst.
@@ -396,8 +395,8 @@ size_t xstrlcpy(char *restrict dst, const char *restrict src, size_t size)
///
/// Note: Replaces `vim_strcat`.
///
-/// @param dst Where to copy the string to
-/// @param src Where to copy the string from
+/// @param dst Buffer to store the string
+/// @param src String to be copied
/// @param dstsize Size of destination buffer, must be greater than 0
/// @return strlen(src) + MIN(dstsize, strlen(initial dst)).
/// If retval >= dstsize, truncation occurs.