]> git.proxmox.com Git - libgit2.git/commitdiff
Some coverity inspired cleanups
authorRussell Belfer <rb@github.com>
Tue, 13 May 2014 22:54:23 +0000 (15:54 -0700)
committerRussell Belfer <rb@github.com>
Tue, 13 May 2014 22:54:23 +0000 (15:54 -0700)
src/config.c
src/config_file.c
src/diff_driver.c
src/tag.c

index 757ff038756c6c7f75b3dd1f6dee27598e7e7481..4bd27a875530c4b808e625ef1c8cd8e7a65f8ae8 100644 (file)
@@ -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;
 }
 
index b00d0827d4ab96b058770efa9e3481076e5ef492..fdc9bc8a2672200ba7aecf6d4fe7e837c01f130a 100644 (file)
@@ -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;
index fc1354f3606ecd7594218ffb83314892823890bb..dc8e79e2576eddd7da3d0b45205d6d19d68a26fe 100644 (file)
@@ -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;
 
index 1a4ee1e1ce4a1452d69282b8887d04c5052fc953..d7b531d3408e519b5df9f1f99afc754bf04e90e1 100644 (file)
--- 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);