]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
macro.h: move DEFER_VOID_CALL() to cleanup-util.h 41316/head
authorLennart Poettering <lennart@amutable.com>
Tue, 24 Mar 2026 08:03:49 +0000 (09:03 +0100)
committerLennart Poettering <lennart@amutable.com>
Wed, 25 Mar 2026 10:52:33 +0000 (11:52 +0100)
For some reason the IMDS PR for the first time triggers an issue with
the DEFER_VOID_CALL() logic relying on assert() and being places in
macro.h, let's hence move this elsewhere.

src/basic/cleanup-util.h
src/basic/macro.h

index 9fd48dbf297337649776efd15ba14705e233a896..068696d9771ca723bafd6b2b96134d0d1e5cfea6 100644 (file)
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include "assert-util.h"
 #include "cleanup-fundamental.h" /* IWYU pragma: export */
 
 typedef void (*free_func_t)(void *p);
@@ -89,3 +90,16 @@ typedef void* (*mfree_func_t)(void *p);
 #define DEFINE_PUBLIC_TRIVIAL_REF_UNREF_FUNC(type, name, free_func)    \
         DEFINE_PUBLIC_TRIVIAL_REF_FUNC(type, name);                    \
         DEFINE_PUBLIC_TRIVIAL_UNREF_FUNC(type, name, free_func);
+
+typedef void (*void_func_t)(void);
+
+static inline void dispatch_void_func(void_func_t *f) {
+        assert(f);
+        assert(*f);
+        (*f)();
+}
+
+/* Inspired by Go's "defer" construct, but much more basic. This basically just calls a void function when
+ * the current scope is left. Doesn't do function parameters (i.e. no closures). */
+#define DEFER_VOID_CALL(x) _DEFER_VOID_CALL(UNIQ, x)
+#define _DEFER_VOID_CALL(uniq, x) _unused_ _cleanup_(dispatch_void_func) void_func_t UNIQ_T(defer, uniq) = (x)
index 7001c331399d6b8396a2faa42f179f497ddc5adb..390a9fab38ca36727efebc922632d268de121726 100644 (file)
@@ -205,16 +205,3 @@ static inline size_t size_add(size_t x, size_t y) {
         for (typeof(entry) _va_sentinel_[1] = {}, _entries_[] = { __VA_ARGS__ __VA_OPT__(,) _va_sentinel_[0] }, *_current_ = _entries_; \
              ((long)(_current_ - _entries_) < (long)(ELEMENTSOF(_entries_) - 1)) && ({ entry = *_current_; true; }); \
              _current_++)
-
-typedef void (*void_func_t)(void);
-
-static inline void dispatch_void_func(void_func_t *f) {
-        assert(f);
-        assert(*f);
-        (*f)();
-}
-
-/* Inspired by Go's "defer" construct, but much more basic. This basically just calls a void function when
- * the current scope is left. Doesn't do function parameters (i.e. no closures). */
-#define DEFER_VOID_CALL(x) _DEFER_VOID_CALL(UNIQ, x)
-#define _DEFER_VOID_CALL(uniq, x) _unused_ _cleanup_(dispatch_void_func) void_func_t UNIQ_T(defer, uniq) = (x)