diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2017-01-26 14:33:03 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-26 14:33:03 +0100 |
commit | 59fd0c4132f06a76c460f46ec93fce7b7f1d6f08 (patch) | |
tree | 0a6eaf861fa7406c9cd06ffd61dc37e84b051975 /src/nvim/memory.c | |
parent | f78982620a48dc76bbd3635300650d06ced24aab (diff) | |
download | rneovim-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.c | 27 |
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. |