]> git.proxmox.com Git - libgit2.git/commitdiff
Fix some Windows warnings
authorRussell Belfer <rb@github.com>
Fri, 7 Feb 2014 23:24:39 +0000 (15:24 -0800)
committerRussell Belfer <rb@github.com>
Fri, 7 Feb 2014 23:43:37 +0000 (15:43 -0800)
This fixes a number of warnings with the Windows 64-bit build
including a test failure in test_repo_message__message where an
invalid pointer to a git_buf was being used.

src/index.c
src/index.h
src/pathspec.c
src/repository.c
tests/repo/head.c
tests/repo/message.c

index 42eb5fd499fe67358518817100382def767d4e0d..aa1aebf8af7a068907f3dc5b18b792c9862bfd4f 100644 (file)
@@ -90,7 +90,7 @@ struct entry_long {
 
 struct entry_srch_key {
        const char *path;
-       int path_len;
+       size_t path_len;
        int stage;
 };
 
@@ -110,7 +110,8 @@ static int index_srch(const void *key, const void *array_member)
 {
        const struct entry_srch_key *srch_key = key;
        const git_index_entry *entry = array_member;
-       int cmp, len1, len2, len;
+       int cmp;
+       size_t len1, len2, len;
 
        len1 = srch_key->path_len;
        len2 = strlen(entry->path);
@@ -134,7 +135,8 @@ static int index_isrch(const void *key, const void *array_member)
 {
        const struct entry_srch_key *srch_key = key;
        const git_index_entry *entry = array_member;
-       int cmp, len1, len2, len;
+       int cmp;
+       size_t len1, len2, len;
 
        len1 = srch_key->path_len;
        len2 = strlen(entry->path);
@@ -599,9 +601,7 @@ const git_index_entry *git_index_get_bypath(
 
        assert(index);
 
-       git_vector_sort(&index->entries);
-
-       if (git_index__find(&pos, index, path, strlen(path), stage) < 0) {
+       if (git_index__find(&pos, index, path, 0, stage) < 0) {
                giterr_set(GITERR_INDEX, "Index does not contain %s", path);
                return NULL;
        }
@@ -837,8 +837,7 @@ static int index_insert(git_index *index, git_index_entry *entry, int replace)
 
        /* look if an entry with this path already exists */
        if (!git_index__find(
-                       &position, index, entry->path, strlen(entry->path),
-                       GIT_IDXENTRY_STAGE(entry))) {
+                       &position, index, entry->path, 0, GIT_IDXENTRY_STAGE(entry))) {
                existing = (git_index_entry **)&index->entries.contents[position];
                /* update filemode to existing values if stat is not trusted */
                entry->mode = index_merge_mode(index, *existing, entry->mode);
@@ -950,9 +949,7 @@ int git_index_remove(git_index *index, const char *path, int stage)
        int error;
        git_index_entry *entry;
 
-       git_vector_sort(&index->entries);
-
-       if (git_index__find(&position, index, path, strlen(path), stage) < 0) {
+       if (git_index__find(&position, index, path, 0, stage) < 0) {
                giterr_set(GITERR_INDEX, "Index does not contain %s at stage %d",
                        path, stage);
                return GIT_ENOTFOUND;
@@ -1009,18 +1006,20 @@ int git_index_remove_directory(git_index *index, const char *dir, int stage)
 }
 
 int git_index__find(
-       size_t *at_pos, git_index *index, const char *path, int path_len, int stage)
+       size_t *out, git_index *index, const char *path, size_t path_len, int stage)
 {
        struct entry_srch_key srch_key;
 
        assert(path);
 
+       git_vector_sort(&index->entries);
+
        srch_key.path = path;
-       srch_key.path_len = path_len;
+       srch_key.path_len = !path_len ? strlen(path) : path_len;
        srch_key.stage = stage;
 
        return git_vector_bsearch2(
-               at_pos, &index->entries, index->entries_search, &srch_key);
+               out, &index->entries, index->entries_search, &srch_key);
 }
 
 int git_index_find(size_t *at_pos, git_index *index, const char *path)
@@ -2234,7 +2233,7 @@ int git_index_add_all(
                /* skip ignored items that are not already in the index */
                if ((flags & GIT_INDEX_ADD_FORCE) == 0 &&
                        git_iterator_current_is_ignored(wditer) &&
-                       git_index__find(&existing, index, wd->path, strlen(wd->path), 0) < 0)
+                       git_index__find(&existing, index, wd->path, 0, 0) < 0)
                        continue;
 
                /* issue notification callback if requested */
index 3dea4aa14ed0ee6ede4a28d15a26d6575bdc76b9..f88d110f7d9fb9f2932c843c8e311aef50830dcc 100644 (file)
@@ -56,7 +56,7 @@ extern int git_index_entry__cmp(const void *a, const void *b);
 extern int git_index_entry__cmp_icase(const void *a, const void *b);
 
 extern int git_index__find(
-       size_t *at_pos, git_index *index, const char *path, int path_len, int stage);
+       size_t *at_pos, git_index *index, const char *path, size_t path_len, int stage);
 
 extern void git_index__set_ignore_case(git_index *index, bool ignore_case);
 
index bee3205767998cef36f9f893c5c8e637619b47af..471488495ed96ecc3994bad3a83debe211ee90c2 100644 (file)
@@ -445,7 +445,7 @@ static int pathspec_match_from_iterator(
                /* check if path is ignored and untracked */
                if (index != NULL &&
                        git_iterator_current_is_ignored(iter) &&
-                       git_index__find(NULL, index, entry->path, strlen(entry->path), GIT_INDEX_STAGE_ANY) < 0)
+                       git_index__find(NULL, index, entry->path, 0, GIT_INDEX_STAGE_ANY) < 0)
                        continue;
 
                /* mark the matched pattern as used */
index 2c1b60266006e502f0a49e4d3170d5588287a6d9..44d0f0b7d628ccd9aba7d5e3b17633d618738102 100644 (file)
@@ -1716,7 +1716,7 @@ cleanup:
        return error;
 }
 
-int git_repository_message(git_buf *out,  git_repository *repo)
+int git_repository_message(git_buf *out, git_repository *repo)
 {
        git_buf path = GIT_BUF_INIT;
        struct stat st;
@@ -1731,10 +1731,10 @@ int git_repository_message(git_buf *out,  git_repository *repo)
                if (errno == ENOENT)
                        error = GIT_ENOTFOUND;
                giterr_set(GITERR_OS, "Could not access message file");
+       } else {
+               error = git_futils_readbuffer(out, git_buf_cstr(&path));
        }
 
-       error = git_futils_readbuffer(out, git_buf_cstr(&path));
-
        git_buf_free(&path);
 
        return error;
index 8ea9a0f424666fc35100cdea79f69b0fedfbb530..127176d123d9cd7ab49a177724be12ef1ed661c9 100644 (file)
@@ -200,7 +200,7 @@ static void test_reflog(git_repository *repo, size_t idx,
                const char *email, const char *message)
 {
        git_reflog *log;
-       git_reflog_entry *entry;
+       const git_reflog_entry *entry;
 
        cl_git_pass(git_reflog_read(&log, repo, "HEAD"));
        entry = git_reflog_entry_byindex(log, idx);
index 57e8e5f4ddf4b2a6b5fe1a4aa42028c533c0400a..87574590b2a38411f90e5368ba1d0631b97ceca7 100644 (file)
@@ -4,38 +4,36 @@
 #include "posix.h"
 
 static git_repository *_repo;
-static git_buf _path;
-static git_buf _actual;
 
 void test_repo_message__initialize(void)
 {
-        _repo = cl_git_sandbox_init("testrepo.git");
-       git_buf_init(&_actual, 0);
+       _repo = cl_git_sandbox_init("testrepo.git");
 }
 
 void test_repo_message__cleanup(void)
 {
-        cl_git_sandbox_cleanup();
-       git_buf_free(&_path);
-       git_buf_free(&_actual);
+       cl_git_sandbox_cleanup();
 }
 
 void test_repo_message__none(void)
 {
-       cl_assert_equal_i(GIT_ENOTFOUND, git_repository_message(&_actual, _repo));
+       git_buf actual = GIT_BUF_INIT;
+       cl_assert_equal_i(GIT_ENOTFOUND, git_repository_message(&actual, _repo));
 }
 
 void test_repo_message__message(void)
 {
+       git_buf path = GIT_BUF_INIT, actual = GIT_BUF_INIT;
        const char expected[] = "Test\n\nThis is a test of the emergency broadcast system\n";
 
-       cl_git_pass(git_buf_joinpath(&_path, git_repository_path(_repo), "MERGE_MSG"));
-       cl_git_mkfile(git_buf_cstr(&_path), expected);
+       cl_git_pass(git_buf_joinpath(&path, git_repository_path(_repo), "MERGE_MSG"));
+       cl_git_mkfile(git_buf_cstr(&path), expected);
 
-       cl_git_pass(git_repository_message(&_actual, _repo));
-       cl_assert_equal_s(expected, _actual);
-       git_buf_free(&_actual);
+       cl_git_pass(git_repository_message(&actual, _repo));
+       cl_assert_equal_s(expected, git_buf_cstr(&actual));
+       git_buf_free(&actual);
 
-       cl_git_pass(p_unlink(git_buf_cstr(&_path)));
-       cl_assert_equal_i(GIT_ENOTFOUND, git_repository_message(&_actual, _repo));
+       cl_git_pass(p_unlink(git_buf_cstr(&path)));
+       cl_assert_equal_i(GIT_ENOTFOUND, git_repository_message(&actual, _repo));
+       git_buf_free(&path);
 }