aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-05-07 21:27:30 -0700
committerJunio C Hamano <junkio@cox.net>2006-05-07 21:27:30 -0700
commitf8ba655ee4131e5c73c28a4ea854b24ce4058e1e (patch)
tree536ebc5b51a8bb486be4c9143e5206b955a776e3
parent178613c737f82489a1e2c387236731541fe19081 (diff)
downloadgit-f8ba655ee4131e5c73c28a4ea854b24ce4058e1e.tar.gz
git-f8ba655ee4131e5c73c28a4ea854b24ce4058e1e.tar.xz
Fix repo-config set-multivar error return path.
This hopefully fixes the problem an earlier commit 5d8ee9ceb attemted to fix. Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r--config.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/config.c b/config.c
index 11d65f8c7..adb5ce476 100644
--- a/config.c
+++ b/config.c
@@ -420,7 +420,7 @@ int git_config_set_multivar(const char* key, const char* value,
const char* value_regex, int multi_replace)
{
int i;
- int fd, in_fd;
+ int fd = -1, in_fd;
int ret;
char* config_filename = strdup(git_path("config"));
char* lock_file = strdup(git_path("config.lock"));
@@ -478,15 +478,11 @@ int git_config_set_multivar(const char* key, const char* value,
if ( ENOENT != errno ) {
error("opening %s: %s", config_filename,
strerror(errno));
- close(fd);
- unlink(lock_file);
ret = 3; /* same as "invalid config file" */
goto out_free;
}
/* if nothing to unset, error out */
if (value == NULL) {
- close(fd);
- unlink(lock_file);
ret = 5;
goto out_free;
}
@@ -514,8 +510,6 @@ int git_config_set_multivar(const char* key, const char* value,
fprintf(stderr, "Invalid pattern: %s\n",
value_regex);
free(store.value_regex);
- close(fd);
- unlink(lock_file);
ret = 6;
goto out_free;
}
@@ -551,8 +545,6 @@ int git_config_set_multivar(const char* key, const char* value,
/* if nothing to unset, or too many matches, error out */
if ((store.seen == 0 && value == NULL) ||
(store.seen > 1 && multi_replace == 0)) {
- close(fd);
- unlink(lock_file);
ret = 5;
goto out_free;
}
@@ -601,8 +593,6 @@ int git_config_set_multivar(const char* key, const char* value,
unlink(config_filename);
}
- close(fd);
-
if (rename(lock_file, config_filename) < 0) {
fprintf(stderr, "Could not rename the lock file?\n");
ret = 4;
@@ -612,10 +602,14 @@ int git_config_set_multivar(const char* key, const char* value,
ret = 0;
out_free:
+ if (0 <= fd)
+ close(fd);
if (config_filename)
free(config_filename);
- if (lock_file)
+ if (lock_file) {
+ unlink(lock_file);
free(lock_file);
+ }
return ret;
}