summaryrefslogtreecommitdiffstats
path: root/man7/string_copying.7
diff options
context:
space:
mode:
Diffstat (limited to 'man7/string_copying.7')
-rw-r--r--man7/string_copying.717
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