If the destination buffer is an array, we can check our assumptions.
This adds a readable way to explain that dsize must be strictly > ssize.
The reason is that the destination string is the source + '\0'.
If the destination is not an array, it's up to _FORTIFY_SOURCE or
-fanalyzer to catch newly introduced errors. There's nothing we can do;
at least not portably.
Suggested-by: Serge Hallyn <serge@hallyn.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
#include <config.h>
+#include <assert.h>
#include <stddef.h>
#include <string.h>
#include "mempcpy.h"
+#include "must_be.h"
#include "sizeof.h"
-#define ZUSTR2STP(dst, src) zustr2stp(dst, src, SIZEOF_ARRAY(src))
+#define ZUSTR2STP(dst, src) \
+({ \
+ static_assert(!is_array(dst) || sizeof(dst) > SIZEOF_ARRAY(src), ""); \
+ \
+ zustr2stp(dst, src, SIZEOF_ARRAY(src)); \
+})
inline char *zustr2stp(char *restrict dst, const char *restrict src, size_t sz);