summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlejandro Colomar <alx@kernel.org>2023-12-03 21:43:07 +0100
committerSerge Hallyn <serge@hallyn.com>2024-03-10 19:55:39 -0500
commitffb3992467a76575da3000e3e72c929fe7ad1038 (patch)
tree1ea6e25e2fb15015222b3acedbe215846f49af65
parentba43b49a5287e2e1c9a18da4da8d95216f38feee (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.am1
-rw-r--r--lib/string/zustr2stp.c14
-rw-r--r--lib/string/zustr2stp.h61
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