By writing the terminating null byte via stpcpy(3), we take advantage of
_FORTIFY_SOURCE for the last byte, which was unprotected before this
commit.
Reported-by: Serge Hallyn <serge@hallyn.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
stpecpy(char *dst, char *end, const char *restrict src)
{
bool trunc;
- char *p;
size_t dsize, dlen, slen;
if (dst == end)
trunc = (slen == dsize);
dlen = slen - trunc;
- p = mempcpy(dst, src, dlen);
- *p = '\0';
-
- return p + trunc;
+ return stpcpy(mempcpy(dst, src, dlen), "") + trunc;
}
strtcpy(char *restrict dst, const char *restrict src, size_t dsize)
{
bool trunc;
- char *p;
size_t dlen, slen;
if (dsize == 0)
trunc = (slen == dsize);
dlen = slen - trunc;
- p = mempcpy(dst, src, dlen);
- *p = '\0';
+ stpcpy(mempcpy(dst, src, dlen), "");
return trunc ? -1 : slen;
}
inline char *
zustr2stp(char *restrict dst, const char *restrict src, size_t sz)
{
- char *p;
-
- p = mempcpy(dst, src, strnlen(src, sz));
- *p = '\0';
-
- return p;
+ return stpcpy(mempcpy(dst, src, strnlen(src, sz)), "");
}