summaryrefslogtreecommitdiff
path: root/src/remote.c
diff options
context:
space:
mode:
authorRussell Belfer <arrbee@arrbee.com>2011-11-30 11:27:15 -0800
committerRussell Belfer <arrbee@arrbee.com>2011-12-07 23:08:15 -0800
commit97769280ba9938ae27f6e06cbd0d5e8a768a86b9 (patch)
tree4fe43e99acb55f904f6b586bd7c5158610f9512f /src/remote.c
parenta22b14d32dd8d5f06f121aa154d45bac3b10a305 (diff)
downloadlibgit2-97769280ba9938ae27f6e06cbd0d5e8a768a86b9.tar.gz
Use git_buf for path storage instead of stack-based buffers
This converts virtually all of the places that allocate GIT_PATH_MAX buffers on the stack for manipulating paths to use git_buf objects instead. The patch is pretty careful not to touch the public API for libgit2, so there are a few places that still use GIT_PATH_MAX. This extends and changes some details of the git_buf implementation to add a couple of extra functions and to make error handling easier. This includes serious alterations to all the path.c functions, and several of the fileops.c ones, too. Also, there are a number of new functions that parallel existing ones except that use a git_buf instead of a stack-based buffer (such as git_config_find_global_r that exists alongsize git_config_find_global). This also modifies the win32 version of p_realpath to allocate whatever buffer size is needed to accommodate the realpath instead of hardcoding a GIT_PATH_MAX limit, but that change needs to be tested still.
Diffstat (limited to 'src/remote.c')
-rw-r--r--src/remote.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/remote.c b/src/remote.c
index eca3f7748..ef42c6e2a 100644
--- a/src/remote.c
+++ b/src/remote.c
@@ -263,7 +263,7 @@ int git_remote_update_tips(git_remote *remote)
{
int error = GIT_SUCCESS;
unsigned int i = 0;
- char refname[GIT_PATH_MAX];
+ git_buf refname = GIT_BUF_INIT;
git_vector *refs = &remote->refs;
git_remote_head *head;
git_reference *ref;
@@ -271,8 +271,6 @@ int git_remote_update_tips(git_remote *remote)
assert(remote);
- memset(refname, 0x0, sizeof(refname));
-
if (refs->length == 0)
return GIT_SUCCESS;
@@ -289,18 +287,20 @@ int git_remote_update_tips(git_remote *remote)
for (; i < refs->length; ++i) {
head = refs->contents[i];
- error = git_refspec_transform(refname, sizeof(refname), spec, head->name);
+ error = git_refspec_transform_r(&refname, spec, head->name);
if (error < GIT_SUCCESS)
- return error;
+ break;
- error = git_reference_create_oid(&ref, remote->repo, refname, &head->oid, 1);
+ error = git_reference_create_oid(&ref, remote->repo, refname.ptr, &head->oid, 1);
if (error < GIT_SUCCESS)
- return error;
+ break;
git_reference_free(ref);
}
- return GIT_SUCCESS;
+ git_buf_free(&refname);
+
+ return error;
}
int git_remote_connected(git_remote *remote)