diff --git a/lib/Makefile.am b/lib/Makefile.am index baef9cd2f..538385726 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -152,7 +152,6 @@ libshadow_la_SOURCES = \ string/strncpy.h \ string/strtcpy.c \ string/strtcpy.h \ - string/zustr2stp.c \ string/zustr2stp.h \ strtoday.c \ sub.c \ diff --git a/lib/string/zustr2stp.c b/lib/string/zustr2stp.c index e27ced3fb..c98b60601 100644 --- a/lib/string/zustr2stp.c +++ b/lib/string/zustr2stp.c @@ -1,17 +1,7 @@ -/* - * SPDX-FileCopyrightText: 2022-2023, Alejandro Colomar - * SPDX-License-Identifier: BSD-3-Clause - */ +// SPDX-FileCopyrightText: 2022-2024, Alejandro Colomar +// SPDX-License-Identifier: BSD-3-Clause #include -#include - -#ident "$Id$" - #include "string/zustr2stp.h" - - -extern inline char *zustr2stp(char *restrict dst, const char *restrict src, - size_t sz); diff --git a/lib/string/zustr2stp.h b/lib/string/zustr2stp.h index 5ed424950..152102b7a 100644 --- a/lib/string/zustr2stp.h +++ b/lib/string/zustr2stp.h @@ -1,79 +1,58 @@ -/* - * SPDX-FileCopyrightText: 2022-2023, Alejandro Colomar - * SPDX-License-Identifier: BSD-3-Clause - */ +// SPDX-FileCopyrightText: 2022-2024, Alejandro Colomar +// SPDX-License-Identifier: BSD-3-Clause -#ifndef SHADOW_INCLUDE_LIBMISC_ZUSTR2STP_H_ -#define SHADOW_INCLUDE_LIBMISC_ZUSTR2STP_H_ +#ifndef SHADOW_INCLUDE_LIB_STRING_ZUSTR2STP_H_ +#define SHADOW_INCLUDE_LIB_STRING_ZUSTR2STP_H_ #include #include -#include #include #include "must_be.h" #include "sizeof.h" -#define ZUSTR2STP(dst, src) \ -({ \ - static_assert(!is_array(dst) || sizeof(dst) > SIZEOF_ARRAY(src), ""); \ - \ - zustr2stp(dst, src, NITEMS(src)); \ -}) - - -inline char *zustr2stp(char *restrict dst, const char *restrict src, size_t sz); - - /* * SYNOPSIS - * char *zustr2stp(char *restrict dst, - * const char src[restrict .sz], size_t sz); + * char *ZUSTR2STP(char *restrict dst, const char src[restrict]); * * ARGUMENTS - * dst Destination buffer where to copy a string. - * - * src Source null-padded character sequence to be copied into - * dst. - * - * sz Size of the *source* buffer. + * dst Destination buffer. + * src Source null-padded character sequence. * * DESCRIPTION - * This function copies the null-padded character sequence pointed - * to by src, into a string at the buffer pointed to by dst. + * This macro copies at most NITEMS(src) non-null bytes from the + * array pointed to by src, followed by a null character, to the + * buffer pointed to by dst. * * RETURN VALUE * dst + strlen(dst) * This function returns a pointer to the terminating NUL * byte. * - * ERRORS - * This function doesn't set errno. - * * CAVEATS * This function doesn't know the size of the destination buffer. * It assumes it will always be large enough. Since the size of * the source buffer is known to the caller, it should make sure to - * allocate a destination buffer of at least `sz + 1`. + * allocate a destination buffer of at least `NITEMS(src) + 1`. * * EXAMPLES - * char src[13] = "Hello, world!" // No '\0' in this buffer! - * char dst[NITEMS(src) + 1]; + * char hostname[NITEMS(utmp->ut_host) + 1]; * - * zustr2stp(dst, src, NITEMS(src)); - * puts(dst); + * len = ZUSTR2STP(hostname, utmp->ut_host) - hostname; + * puts(hostname); */ -inline char * -zustr2stp(char *restrict dst, const char *restrict src, size_t sz) -{ - return stpcpy(mempcpy(dst, src, strnlen(src, sz)), ""); -} +#define ZUSTR2STP(dst, src) \ +({ \ + static_assert(!is_array(dst) || sizeof(dst) > SIZEOF_ARRAY(src), ""); \ + \ + stpcpy(mempcpy(dst, src, strnlen(src, NITEMS(src))), ""); \ +}) #endif // include guard