Merge pull request #20348 from poettering/free-and-replace-double-eval

make free_and_replace() double eval free
This commit is contained in:
Luca Boccassi
2021-07-30 11:38:13 +01:00
committed by GitHub
3 changed files with 12 additions and 10 deletions
+5 -3
View 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; \
})
+5 -3
View 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; \
})
@@ -416,8 +416,7 @@ int xdg_autostart_format_exec_start(
if (!escaped)
return log_oom();
free_and_replace(exec_split[n], escaped);
n++;
free_and_replace(exec_split[n++], escaped);
continue;
}
@@ -457,8 +456,7 @@ int xdg_autostart_format_exec_start(
if (!quoted)
return log_oom();
free_and_replace(exec_split[n], quoted);
n++;
free_and_replace(exec_split[n++], quoted);
}
for (; exec_split[n]; n++)
exec_split[n] = mfree(exec_split[n]);