Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSven Strickroth <sven@cs-ware.de>2015-08-14 23:21:17 +0300
committerJunio C Hamano <gitster@pobox.com>2015-08-14 23:49:41 +0300
commit54d160ec0deebfa7bf0cfc499c69ff5364b118c6 (patch)
treea8177fc47f87081642ea8736839bfec0b74465cd /config.c
parente88b8586bfd967cbfec62359cf4c53ec65848054 (diff)
config: close config file handle in case of error
When updating an existing configuration file, we did not always close the filehandle that is reading from the current configuration file when we encountered an error (e.g. when unsetting a variable that does not exist). Signed-off-by: Sven Strickroth <email@cs-ware.de> Signed-off-by: Sup Yut Sum <ch3cooli@gmail.com> Reviewed-by: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'config.c')
-rw-r--r--config.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/config.c b/config.c
index 9fd275f2c2..83caa2546e 100644
--- a/config.c
+++ b/config.c
@@ -1935,7 +1935,7 @@ int git_config_set_multivar_in_file(const char *config_filename,
const char *key, const char *value,
const char *value_regex, int multi_replace)
{
- int fd = -1, in_fd;
+ int fd = -1, in_fd = -1;
int ret;
struct lock_file *lock = NULL;
char *filename_buf = NULL;
@@ -2065,6 +2065,7 @@ int git_config_set_multivar_in_file(const char *config_filename,
goto out_free;
}
close(in_fd);
+ in_fd = -1;
if (chmod(lock->filename.buf, st.st_mode & 07777) < 0) {
error("chmod on %s failed: %s",
@@ -2148,6 +2149,8 @@ out_free:
free(filename_buf);
if (contents)
munmap(contents, contents_sz);
+ if (in_fd >= 0)
+ close(in_fd);
return ret;
write_err_out: