aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/memory.c
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2024-04-20 19:31:00 +0800
committerGitHub <noreply@github.com>2024-04-20 19:31:00 +0800
commit0ea38c9a53dfcff17703ea22f701ed1cc5bbd7d3 (patch)
tree60fa7289ee8fc164da54b905d030a09671297867 /src/nvim/memory.c
parent4d52b0cf670502caf81b70f2f1e6f8c548b78f58 (diff)
downloadrneovim-0ea38c9a53dfcff17703ea22f701ed1cc5bbd7d3.tar.gz
rneovim-0ea38c9a53dfcff17703ea22f701ed1cc5bbd7d3.tar.bz2
rneovim-0ea38c9a53dfcff17703ea22f701ed1cc5bbd7d3.zip
refactor: add xmemcpyz() and use it in place of some xstrlcpy() (#28422)
Problem: Using xstrlcpy() when the exact length of the string to be copied is known is not ideal because it requires adding 1 to the length and an unnecessary strlen(). Solution: Add xmemcpyz() and use it in place of such xstrlcpy() calls.
Diffstat (limited to 'src/nvim/memory.c')
-rw-r--r--src/nvim/memory.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/nvim/memory.c b/src/nvim/memory.c
index 37e53e4453..64deedefe5 100644
--- a/src/nvim/memory.c
+++ b/src/nvim/memory.c
@@ -202,7 +202,7 @@ void *xmallocz(size_t size)
}
void *ret = xmalloc(total_size);
- ((char *)ret)[size] = 0;
+ ((char *)ret)[size] = '\0';
return ret;
}
@@ -222,6 +222,21 @@ void *xmemdupz(const void *data, size_t len)
return memcpy(xmallocz(len), data, len);
}
+/// Duplicates `len` bytes of `src` to `dst` and zero terminates it.
+/// and returns a pointer to the allocated memory. If the allocation fails,
+/// the program dies.
+///
+/// @see {xstrlcpy}
+/// @param[out] dst Buffer to store the result.
+/// @param[in] src Buffer to be copied.
+/// @param[in] len Number of bytes to be copied.
+void *xmemcpyz(void *dst, const void *src, size_t len)
+{
+ memcpy(dst, src, len);
+ ((char *)dst)[len] = '\0';
+ return dst;
+}
+
#ifndef HAVE_STRNLEN
size_t xstrnlen(const char *s, size_t n)
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_PURE