diff options
-rw-r--r-- | man7/string_copying.7 | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/man7/string_copying.7 b/man7/string_copying.7 index d79812a6a..0b1562e4c 100644 --- a/man7/string_copying.7 +++ b/man7/string_copying.7 @@ -734,19 +734,20 @@ ssize_t char * .IR stpecpy "(char *dst, char end[0], const char *restrict src)" { - char *p; + bool trunc; + size_t dsize, dlen, slen; \& - if (dst == NULL) - return NULL; if (dst == end) return end; + if (dst == NULL) + return NULL; \& - p = memccpy(dst, src, \[aq]\e0\[aq], end \- dst); - if (p != NULL) - return p \- 1; + dsize = end \- dst; + slen = strnlen(src, dsize); + trunc = (slen == dsize); + dlen = slen \- trunc; \& - /* truncation detected */ - return stpcpy(end\-1, ""); + return stpcpy(mempcpy(dst, src, dlen), "") + trunc; } .\" ----- SEE ALSO :: -------------------------------------------------/ .SH SEE ALSO |