]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
memzero.[ch]: Define memzero() and strzero() as inline functions
authorAlejandro Colomar <alx@kernel.org>
Sun, 30 Jul 2023 11:30:47 +0000 (13:30 +0200)
committerIker Pedrosa <ikerpedrosam@gmail.com>
Fri, 1 Sep 2023 07:39:23 +0000 (09:39 +0200)
There's no need to have these as macros, so use functions, which are a
lot safer: there's no need to worry about multiple evaluation of args,
and there's also more type safety.  Compiler warnings are also simpler,
as they don't dump all the nested macros.

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
lib/Makefile.am
lib/memzero.c [new file with mode: 0644]
lib/memzero.h

index e778004e7e392ff6b6c15c8f46b44d639f1ac186..f585215153b8fd861dd9b93db76f41c9308ee98f 100644 (file)
@@ -85,6 +85,7 @@ libshadow_la_SOURCES = \
        mail.c \
        mempcpy.c \
        mempcpy.h \
+       memzero.c \
        memzero.h \
        motd.c \
        myname.c \
diff --git a/lib/memzero.c b/lib/memzero.c
new file mode 100644 (file)
index 0000000..8979e5f
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * SPDX-FileCopyrightText: 2023, Alejandro Colomar <alx@kernel.org>
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include <stddef.h>
+
+#include "memzero.h"
+
+
+extern inline void memzero(void *ptr, size_t size);
+extern inline void strzero(char *s);
index 49ddecbcdf6b45914a40ec71e869702628bcad8d..c81cd0ce27ce500f0fab9f0a1c7c799fb67aad03 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * SPDX-FileCopyrightText: 2022-2023, Christian Göttsche <cgzones@googlemail.com>
+ * SPDX-FileCopyrightText: 2023, Alejandro Colomar <alx@kernel.org>
  * SPDX-License-Identifier: BSD-3-Clause
  */
 
 #include <strings.h>
 
 
-#ifdef HAVE_MEMSET_EXPLICIT
-# define memzero(ptr, size) memset_explicit((ptr), 0, (size))
-#elif defined HAVE_EXPLICIT_BZERO
-# define memzero(ptr, size) explicit_bzero((ptr), (size))
-#else
-static inline void memzero(void *ptr, size_t size)
+inline void memzero(void *ptr, size_t size);
+inline void strzero(char *s);
+
+
+inline void
+memzero(void *ptr, size_t size)
 {
+#if defined(HAVE_MEMSET_EXPLICIT)
+       memset_explicit(ptr, 0, size);
+#elif defined(HAVE_EXPLICIT_BZERO)
+       explicit_bzero(ptr, size);
+#else
        ptr = memset(ptr, '\0', size);
        __asm__ __volatile__ ("" : : "r"(ptr) : "memory");
-}
 #endif
+}
+
 
-#define strzero(s) memzero(s, strlen(s))       /* warning: evaluates twice */
+inline void
+strzero(char *s)
+{
+       memzero(s, strlen(s));
+}
 
 
 #endif  // include guard