Branch: refs/heads/master Author: Colomban Wendling ban@herbesfolles.org Committer: Colomban Wendling ban@herbesfolles.org Date: Mon, 23 Sep 2013 19:54:30 UTC Commit: af3421e688af3a8a81ffdaca1701dbeb49b5ebaa https://github.com/geany/geany/commit/af3421e688af3a8a81ffdaca1701dbeb49b5eb...
Log Message: ----------- Plug a memory leak
Do not evaluate a macro argument multiple times if it gets passed an expression, especially if that expression allocates memory.
Thanks to Pavel Roschin for spotting the leak.
Modified Paths: -------------- src/build.c
Modified: src/build.c 21 files changed, 12 insertions(+), 9 deletions(-) =================================================================== @@ -2523,15 +2523,18 @@ void build_load_menu(GKeyFile *config, GeanyBuildSource src, gpointer p)
/* set GeanyBuildCommand if it doesn't already exist and there is a command */ /* TODO: rewrite as function */ -#define ASSIGNIF(type, id, string, value) \ - if (!EMPTY(value) && ! type[GBO_TO_CMD(id)].exists) { \ - type[GBO_TO_CMD(id)].exists = TRUE; \ - SETPTR(type[GBO_TO_CMD(id)].label, g_strdup(string)); \ - SETPTR(type[GBO_TO_CMD(id)].command, (value)); \ - SETPTR(type[GBO_TO_CMD(id)].working_dir, NULL); \ - type[GBO_TO_CMD(id)].old = TRUE; \ - } else \ - g_free(value); +#define ASSIGNIF(type, id, string, value) \ + do { \ + gchar *ASSIGNF__value = (value); \ + if (!EMPTY(ASSIGNF__value) && ! type[GBO_TO_CMD(id)].exists) { \ + type[GBO_TO_CMD(id)].exists = TRUE; \ + SETPTR(type[GBO_TO_CMD(id)].label, g_strdup(string)); \ + SETPTR(type[GBO_TO_CMD(id)].command, ASSIGNF__value); \ + SETPTR(type[GBO_TO_CMD(id)].working_dir, NULL); \ + type[GBO_TO_CMD(id)].old = TRUE; \ + } else \ + g_free(ASSIGNF__value); \ + } while (0)
switch (src) {
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).