summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell Belfer <rb@github.com>2014-05-13 15:54:23 -0700
committerRussell Belfer <rb@github.com>2014-05-13 15:54:23 -0700
commita37aa82ea6f952745c883065a86162343e438981 (patch)
tree92d2392f7488d06c845afbb033d6b0b284cc1b42
parent03fcef188952184136539add2bd14a95ec0abacd (diff)
downloadlibgit2-a37aa82ea6f952745c883065a86162343e438981.tar.gz
Some coverity inspired cleanups
-rw-r--r--src/config.c12
-rw-r--r--src/config_file.c8
-rw-r--r--src/diff_driver.c10
-rw-r--r--src/tag.c14
4 files changed, 24 insertions, 20 deletions
diff --git a/src/config.c b/src/config.c
index 757ff0387..4bd27a875 100644
--- a/src/config.c
+++ b/src/config.c
@@ -153,19 +153,19 @@ int git_config_snapshot(git_config **out, git_config *in)
git_config_backend *b;
if ((error = internal->file->snapshot(&b, internal->file)) < 0)
- goto on_error;
+ break;
if ((error = git_config_add_backend(config, b, internal->level, 0)) < 0) {
b->free(b);
- goto on_error;
+ break;
}
}
- *out = config;
- return error;
+ if (error < 0)
+ git_config_free(config);
+ else
+ *out = config;
-on_error:
- git_config_free(config);
return error;
}
diff --git a/src/config_file.c b/src/config_file.c
index b00d0827d..fdc9bc8a2 100644
--- a/src/config_file.c
+++ b/src/config_file.c
@@ -313,6 +313,7 @@ static int config__refresh(git_config_backend *cfg)
goto out;
reader = git_array_get(b->readers, git_array_size(b->readers) - 1);
+ GITERR_CHECK_ALLOC(reader);
if ((error = config_parse(values->values, b, reader, b->level, 0)) < 0)
goto out;
@@ -327,7 +328,8 @@ static int config__refresh(git_config_backend *cfg)
out:
refcounted_strmap_free(values);
- git_buf_free(&reader->buffer);
+ if (reader)
+ git_buf_free(&reader->buffer);
return error;
}
@@ -344,8 +346,8 @@ static int config_refresh(git_config_backend *cfg)
&reader->buffer, reader->file_path,
&reader->file_mtime, &reader->file_size, &updated);
- if (error < 0)
- return (error == GIT_ENOTFOUND) ? 0 : error;
+ if (error < 0 && error != GIT_ENOTFOUND)
+ return error;
if (updated)
any_updated = 1;
diff --git a/src/diff_driver.c b/src/diff_driver.c
index fc1354f36..dc8e79e25 100644
--- a/src/diff_driver.c
+++ b/src/diff_driver.c
@@ -233,17 +233,17 @@ static int git_diff_driver_load(
return 0;
}
+ drv = git__calloc(1, sizeof(git_diff_driver) + namelen + 1);
+ GITERR_CHECK_ALLOC(drv);
+ drv->type = DIFF_DRIVER_AUTO;
+ memcpy(drv->name, driver_name, namelen);
+
/* if you can't read config for repo, just use default driver */
if (git_repository_config_snapshot(&cfg, repo) < 0) {
giterr_clear();
goto done;
}
- drv = git__calloc(1, sizeof(git_diff_driver) + namelen + 1);
- GITERR_CHECK_ALLOC(drv);
- drv->type = DIFF_DRIVER_AUTO;
- memcpy(drv->name, driver_name, namelen);
-
if ((error = git_buf_printf(&name, "diff.%s.binary", driver_name)) < 0)
goto done;
diff --git a/src/tag.c b/src/tag.c
index 1a4ee1e1c..d7b531d34 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -363,20 +363,22 @@ int git_tag_create_frombuffer(git_oid *oid, git_repository *repo, const char *bu
}
/* write the buffer */
- if (git_odb_open_wstream(&stream, odb, strlen(buffer), GIT_OBJ_TAG) < 0)
- return -1;
+ if ((error = git_odb_open_wstream(
+ &stream, odb, strlen(buffer), GIT_OBJ_TAG)) < 0)
+ return error;
- git_odb_stream_write(stream, buffer, strlen(buffer));
+ if (!(error = git_odb_stream_write(stream, buffer, strlen(buffer))))
+ error = git_odb_stream_finalize_write(oid, stream);
- error = git_odb_stream_finalize_write(oid, stream);
git_odb_stream_free(stream);
if (error < 0) {
git_buf_free(&ref_name);
- return -1;
+ return error;
}
- error = git_reference_create(&new_ref, repo, ref_name.ptr, oid, allow_ref_overwrite, NULL, NULL);
+ error = git_reference_create(
+ &new_ref, repo, ref_name.ptr, oid, allow_ref_overwrite, NULL, NULL);
git_reference_free(new_ref);
git_buf_free(&ref_name);