diff options
author | Alejandro Colomar <alx@kernel.org> | 2023-12-03 21:43:07 +0100 |
---|---|---|
committer | Serge Hallyn <serge@hallyn.com> | 2024-03-10 19:55:39 -0500 |
commit | ffb3992467a76575da3000e3e72c929fe7ad1038 (patch) | |
tree | 1ea6e25e2fb15015222b3acedbe215846f49af65 | |
parent | ba43b49a5287e2e1c9a18da4da8d95216f38feee (diff) |
lib/string/zustr2stp.[ch]: Remove zustr2stp(); keep ZUSTR2STP()
The function should never be used; it's always used via its wrapper
macro. To simplify, and reduce chances of confusion: remove the
function, and implement the macro directly in terms of
stpcpy(mempcpy(strnlen())).
Update the documentation, and improve the example, which was rather
confusing.
Cc: "Serge E. Hallyn" <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
-rw-r--r-- | lib/Makefile.am | 1 | ||||
-rw-r--r-- | lib/string/zustr2stp.c | 14 | ||||
-rw-r--r-- | lib/string/zustr2stp.h | 61 |
3 files changed, 22 insertions, 54 deletions
diff --git a/lib/Makefile.am b/lib/Makefile.am index baef9cd2..53838572 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 e27ced3f..c98b6060 100644 --- a/lib/string/zustr2stp.c +++ b/lib/string/zustr2stp.c @@ -1,17 +1,7 @@ -/* - * SPDX-FileCopyrightText: 2022-2023, Alejandro Colomar <alx@kernel.org> - * SPDX-License-Identifier: BSD-3-Clause - */ +// SPDX-FileCopyrightText: 2022-2024, Alejandro Colomar <alx@kernel.org> +// SPDX-License-Identifier: BSD-3-Clause #include <config.h> -#include <stddef.h> - -#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 5ed42495..152102b7 100644 --- a/lib/string/zustr2stp.h +++ b/lib/string/zustr2stp.h @@ -1,79 +1,58 @@ -/* - * SPDX-FileCopyrightText: 2022-2023, Alejandro Colomar <alx@kernel.org> - * SPDX-License-Identifier: BSD-3-Clause - */ +// SPDX-FileCopyrightText: 2022-2024, Alejandro Colomar <alx@kernel.org> +// 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 <config.h> #include <assert.h> -#include <stddef.h> #include <string.h> #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 |