]> git.proxmox.com Git - libgit2.git/commitdiff
Fix valgrind warnings and spurious error messages
authorRussell Belfer <rb@github.com>
Fri, 24 Aug 2012 19:19:22 +0000 (12:19 -0700)
committerRussell Belfer <rb@github.com>
Fri, 24 Aug 2012 19:19:22 +0000 (12:19 -0700)
Just clean up valgrind warnings about uninitialized memory
and also clear out errno in some cases where it results in
a false error message being generated at a later point.

src/checkout.c
src/errors.c
src/filebuf.c
src/submodule.c

index ac540391e7497089d8ac49c52e0687e5435942ee..88df2128db42c17ee0f149d6a853fef89c2ba196 100644 (file)
@@ -31,7 +31,7 @@ typedef struct tree_walk_data
        git_checkout_opts *opts;
        git_repository *repo;
        git_odb *odb;
-       bool do_symlinks;
+       bool no_symlinks;
 } tree_walk_data;
 
 
@@ -48,9 +48,9 @@ static int blob_contents_to_link(tree_walk_data *data, git_buf *fnbuf,
                        /* Create the link */
                        const char *new = git_buf_cstr(&linktarget),
                                                  *old = git_buf_cstr(fnbuf);
-                       retcode = data->do_symlinks
-                               ? p_symlink(new, old)
-                               : git_futils_fake_symlink(new, old);
+                       retcode = data->no_symlinks
+                               ? git_futils_fake_symlink(new, old)
+                               : p_symlink(new, old);
                }
                git_buf_free(&linktarget);
                git_blob_free(blob);
@@ -176,13 +176,14 @@ int git_checkout_head(git_repository *repo, git_checkout_opts *opts, git_indexer
                return GIT_ERROR;
        }
 
+       memset(&payload, 0, sizeof(payload));
+
        /* Determine if symlinks should be handled */
-       if (!git_repository_config(&cfg, repo)) {
+       if (!git_repository_config__weakptr(&cfg, repo)) {
                int temp = true;
                if (!git_config_get_bool(&temp, cfg, "core.symlinks")) {
-                       payload.do_symlinks = !!temp;
+                       payload.no_symlinks = !temp;
                }
-               git_config_free(cfg);
        }
 
        stats->total = stats->processed = 0;
index d43d7d9b56e00b0ff11c140c9125acc8357671d1..802ad36476bd80e183506674dda9cf117f601a9d 100644 (file)
@@ -110,6 +110,11 @@ void giterr_set_regex(const regex_t *regex, int error_code)
 void giterr_clear(void)
 {
        GIT_GLOBAL->last_error = NULL;
+
+       errno = 0;
+#ifdef GIT_WIN32
+       SetLastError(0);
+#endif
 }
 
 const git_error *giterr_last(void)
index 8b3ebb3e2332c8f15ecfc7c99836eb5c40227b38..cfc8528e62ac0d3573e3b7a31326fa6bd618534c 100644 (file)
@@ -50,6 +50,7 @@ static int lock_file(git_filebuf *file, int flags)
                if (flags & GIT_FILEBUF_FORCE)
                        p_unlink(file->path_lock);
                else {
+                       giterr_clear(); /* actual OS error code just confuses */
                        giterr_set(GITERR_OS,
                                "Failed to lock file '%s' for writing", file->path_lock);
                        return -1;
index 15501a1dd5e20f795e3f9e9d39ea8200e594b865..a9de9ee6ed93ae062eb44ca0a046daf3a6d8775c 100644 (file)
@@ -367,6 +367,8 @@ int git_submodule_add_to_index(git_submodule *sm, int write_index)
                error = -1;
                goto cleanup;
        }
+
+       memset(&entry, 0, sizeof(entry));
        entry.path = sm->path;
        git_index__init_entry_from_stat(&st, &entry);