]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
memory-util: make mempcpy_typesafe nestable
authorMike Yuan <me@yhndnzj.com>
Thu, 20 Mar 2025 16:27:39 +0000 (17:27 +0100)
committerMike Yuan <me@yhndnzj.com>
Thu, 20 Mar 2025 16:31:54 +0000 (17:31 +0100)
src/basic/memory-util.h

index 04de0ab1c132596d6a2e80e9c7f8956c6b3c942b..0a035ef087a39335c12a7fa89011d241d7fceed4 100644 (file)
@@ -35,13 +35,16 @@ static inline void* mempcpy_safe(void *dst, const void *src, size_t n) {
         return mempcpy(dst, src, n);
 }
 
-#define mempcpy_typesafe(dst, src, n)                                   \
+#define _mempcpy_typesafe(dst, src, n, sz)                              \
         ({                                                              \
-                size_t _sz_;                                            \
-                assert_se(MUL_SAFE(&_sz_, sizeof((dst)[0]), n));        \
-                (typeof((dst)[0])*) mempcpy_safe(dst, src, _sz_);       \
+                size_t sz;                                              \
+                assert_se(MUL_SAFE(&sz, sizeof((dst)[0]), n));          \
+                (typeof((dst)[0])*) mempcpy_safe(dst, src, sz);         \
         })
 
+#define mempcpy_typesafe(dst, src, n)                                   \
+        _mempcpy_typesafe(dst, src, n, UNIQ_T(sz, UNIQ))
+
 /* Normal memcmp() requires s1 and s2 to be nonnull. We do nothing if n is 0. */
 static inline int memcmp_safe(const void *s1, const void *s2, size_t n) {
         if (n == 0)