mirror of
https://github.com/neovim/neovim.git
synced 2025-09-27 13:38:34 +00:00
memory: implement xstp(n)cpy
Both are implemented to POSIX 2008 spec, though I'm not sure I'm happy about stpncpy's behaviour.
This commit is contained in:

committed by
Thiago de Arruda

parent
466b73108f
commit
6b486f41d1
20
src/memory.c
20
src/memory.c
@@ -173,6 +173,26 @@ void *xmemdupz(const void *data, size_t len)
|
||||
return memcpy(xmallocz(len), data, len);
|
||||
}
|
||||
|
||||
char *xstpcpy(char *restrict dst, const char *restrict src)
|
||||
{
|
||||
const size_t len = strlen(src);
|
||||
return (char *)memcpy(dst, src, len + 1) + len;
|
||||
}
|
||||
|
||||
char *xstpncpy(char *restrict dst, const char *restrict src, size_t maxlen)
|
||||
{
|
||||
const char *p = memchr(src, '\0', maxlen);
|
||||
if (p) {
|
||||
size_t srclen = (size_t)(p - src);
|
||||
memcpy(dst, src, srclen);
|
||||
memset(dst + srclen, 0, maxlen - srclen);
|
||||
return dst + srclen;
|
||||
} else {
|
||||
memcpy(dst, src, maxlen);
|
||||
return dst + maxlen;
|
||||
}
|
||||
}
|
||||
|
||||
char * xstrdup(const char *str)
|
||||
{
|
||||
char *ret = strdup(str);
|
||||
|
Reference in New Issue
Block a user