]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
alloc-util: drop double eval from free_and_replace()
authorLennart Poettering <lennart@poettering.net>
Thu, 29 Jul 2021 19:05:38 +0000 (21:05 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 29 Jul 2021 19:12:58 +0000 (21:12 +0200)
Inspired by: 2744c7bb0176dc6b86a69acd4c449ea9e269e097

src/basic/alloc-util.h
src/basic/strv.h

index 3c33308f481c9748687db42dcfb7e0eeea1bad54..0af425e4914ffc31ef1e3cf3dc7816ec969990bc 100644 (file)
@@ -51,9 +51,11 @@ static inline void *mfree(void *memory) {
 
 #define free_and_replace(a, b)                  \
         ({                                      \
-                free(a);                        \
-                (a) = (b);                      \
-                (b) = NULL;                     \
+                typeof(a)* _a = &(a);           \
+                typeof(b)* _b = &(b);           \
+                free(*_a);                      \
+                (*_a) = (*_b);                  \
+                (*_b) = NULL;                   \
                 0;                              \
         })
 
index 911528fab495a9d761211ccfd8f7116f168a526b..e7654c0c0ff6f09417c4c135e0220016502a5df1 100644 (file)
@@ -233,9 +233,11 @@ int fputstrv(FILE *f, char * const *l, const char *separator, bool *space);
 
 #define strv_free_and_replace(a, b)             \
         ({                                      \
-                strv_free(a);                   \
-                (a) = (b);                      \
-                (b) = NULL;                     \
+                char ***_a = &(a);              \
+                char ***_b = &(b);              \
+                strv_free(*_a);                 \
+                (*_a) = (*_b);                  \
+                (*_b) = NULL;                   \
                 0;                              \
         })