summaryrefslogtreecommitdiff
path: root/config.c
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2016-05-18 18:39:49 -0400
committerJunio C Hamano <gitster@pobox.com>2016-05-24 13:21:59 -0700
commita77d6db69b2cbd16e98763f33ceaa76ff5ca2c54 (patch)
tree494745fc3aca2872350c56dab1ffa67c390065e9 /config.c
parentc72ee44bf4bc7549ee8710037ae8adfae6d8efc2 (diff)
downloadgit-a77d6db69b2cbd16e98763f33ceaa76ff5ca2c54.tar.gz
git_config_parse_parameter: refactor cleanup code
We have several exits from the function, each of which has to do some cleanup. Let's consolidate these in an "out" label we can jump to. This doesn't save us much now, but it will help as we add more things that need cleanup. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'config.c')
-rw-r--r--config.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/config.c b/config.c
index 771d0ddbec..c5d0b0c7aa 100644
--- a/config.c
+++ b/config.c
@@ -205,6 +205,7 @@ int git_config_parse_parameter(const char *text,
int git_config_from_parameters(config_fn_t fn, void *data)
{
const char *env = getenv(CONFIG_DATA_ENVIRONMENT);
+ int ret = 0;
char *envw;
const char **argv = NULL;
int nr = 0, alloc = 0;
@@ -216,21 +217,21 @@ int git_config_from_parameters(config_fn_t fn, void *data)
envw = xstrdup(env);
if (sq_dequote_to_argv(envw, &argv, &nr, &alloc) < 0) {
- free(envw);
- return error("bogus format in " CONFIG_DATA_ENVIRONMENT);
+ ret = error("bogus format in " CONFIG_DATA_ENVIRONMENT);
+ goto out;
}
for (i = 0; i < nr; i++) {
if (git_config_parse_parameter(argv[i], fn, data) < 0) {
- free(argv);
- free(envw);
- return -1;
+ ret = -1;
+ goto out;
}
}
+out:
free(argv);
free(envw);
- return 0;
+ return ret;
}
static int get_next_char(void)