#include "strlcpy.h"
-extern inline ssize_t strlcpy_(char *restrict dst, const char *restrict src,
- size_t size);
+extern inline ssize_t strtcpy(char *restrict dst, const char *restrict src,
+ size_t dsize);
#include <config.h>
+#include <stdbool.h>
#include <stddef.h>
#include <string.h>
#include <sys/types.h>
*/
-#define STRLCPY(dst, src) strlcpy_(dst, src, SIZEOF_ARRAY(dst))
+#define STRLCPY(dst, src) strtcpy(dst, src, SIZEOF_ARRAY(dst))
-inline ssize_t strlcpy_(char *restrict dst, const char *restrict src,
- size_t size);
+inline ssize_t strtcpy(char *restrict dst, const char *restrict src,
+ size_t dsize);
inline ssize_t
-strlcpy_(char *restrict dst, const char *restrict src, size_t size)
+strtcpy(char *restrict dst, const char *restrict src, size_t dsize)
{
- size_t len;
+ bool trunc;
+ char *p;
+ size_t dlen, slen;
- len = strlcpy(dst, src, size);
+ if (dsize == 0)
+ return -1;
- return (len >= size) ? -1 : len;
+ slen = strnlen(src, dsize);
+ trunc = (slen == dsize);
+ dlen = slen - trunc;
+
+ p = mempcpy(dst, src, dlen);
+ *p = '\0';
+
+ return trunc ? -1 : slen;
}