These macros take the end of the array argument implicitly to avoid programmer mistakes. This guarantees that the input is an array, unlike
snprintf(buf, sizeof(buf), ...); which is dangerous if the programmer passes a pointer instead of an array. These macros are essentially the same as the 2-argument version of strscpy(), but with a formatted string, and returning a pointer to the terminating '\0' (or NULL, on error). Cc: Rasmus Villemoes <li...@rasmusvillemoes.dk> Cc: Marco Elver <el...@google.com> Cc: Michal Hocko <mho...@suse.com> Cc: Linus Torvalds <torva...@linux-foundation.org> Cc: Al Viro <v...@zeniv.linux.org.uk> Signed-off-by: Alejandro Colomar <a...@kernel.org> --- include/linux/sprintf.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/linux/sprintf.h b/include/linux/sprintf.h index a0dc35574521..8576a543e62c 100644 --- a/include/linux/sprintf.h +++ b/include/linux/sprintf.h @@ -4,6 +4,10 @@ #include <linux/compiler_attributes.h> #include <linux/types.h> +#include <linux/array_size.h> + +#define sprintf_array(a, fmt, ...) sprintf_end(a, ENDOF(a), fmt, ##__VA_ARGS__) +#define vsprintf_array(a, fmt, ap) vsprintf_end(a, ENDOF(a), fmt, ap) int num_to_str(char *buf, int size, unsigned long long num, unsigned int width); -- 2.50.0