diff --git a/lib/strlcpy.c b/lib/strlcpy.c new file mode 100644 index 00000000..fab04fed --- /dev/null +++ b/lib/strlcpy.c @@ -0,0 +1,15 @@ +/* + * SPDX-FileCopyrightText: 2022-2023, Alejandro Colomar + * SPDX-License-Identifier: BSD-3-Clause + */ + + +#include + +#ident "$Id$" + +#include "strlcpy.h" + + +extern inline size_t strlcpy_(char *restrict dst, const char *restrict src, + size_t size); diff --git a/lib/strlcpy.h b/lib/strlcpy.h index 5ef9b8a7..e725078b 100644 --- a/lib/strlcpy.h +++ b/lib/strlcpy.h @@ -42,15 +42,22 @@ */ -#define STRLCPY(dst, src) \ -({ \ - size_t sz_, len_; \ - \ - sz_ = SIZEOF_ARRAY(dst); \ - len_ = strlcpy(dst, src, sz_); \ - \ - (len_ >= sz_) ? -1 : len_; \ -}) +#define STRLCPY(dst, src) strlcpy_(dst, src, SIZEOF_ARRAY(dst)) + + +inline size_t strlcpy_(char *restrict dst, const char *restrict src, + size_t size); + + +inline size_t +strlcpy_(char *restrict dst, const char *restrict src, size_t size) +{ + size_t len; + + len = strlcpy(dst, src, size); + + return (len >= size) ? -1 : len; +} #endif // include guard