summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRussell Belfer <rb@github.com>2014-02-07 15:24:39 -0800
committerRussell Belfer <rb@github.com>2014-02-07 15:43:37 -0800
commit3158e2febe87787dc7804b5670f4dc53aeca87ed (patch)
treebc3299249f84561c3d4cb1dd6d35f5282d86cfdc /src
parentc4ee3b54f803c1cfc957cdc8a2a5ca9c0c47e1d7 (diff)
downloadlibgit2-3158e2febe87787dc7804b5670f4dc53aeca87ed.tar.gz
Fix some Windows warnings
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.
Diffstat (limited to 'src')
-rw-r--r--src/index.c29
-rw-r--r--src/index.h2
-rw-r--r--src/pathspec.c2
-rw-r--r--src/repository.c6
4 files changed, 19 insertions, 20 deletions
diff --git a/src/index.c b/src/index.c
index 42eb5fd49..aa1aebf8a 100644
--- a/src/index.c
+++ b/src/index.c
@@ -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 */
diff --git a/src/index.h b/src/index.h
index 3dea4aa14..f88d110f7 100644
--- a/src/index.h
+++ b/src/index.h
@@ -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);
diff --git a/src/pathspec.c b/src/pathspec.c
index bee320576..471488495 100644
--- a/src/pathspec.c
+++ b/src/pathspec.c
@@ -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 */
diff --git a/src/repository.c b/src/repository.c
index 2c1b60266..44d0f0b7d 100644
--- a/src/repository.c
+++ b/src/repository.c
@@ -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;