Plug leaks and fix a C99-ism

We have too many places where we repeat free code, so when adding the
new free to the generic code, it didn't take for the local transport.

While there, fix a C99-ism that sneaked through.
This commit is contained in:
Carlos Martín Nieto 2014-05-22 12:28:39 +02:00
parent a598264463
commit 4c4408c351
3 changed files with 16 additions and 13 deletions

View File

@ -113,11 +113,12 @@ static int update_head_to_new_branch(
const char *reflog_message)
{
git_reference *tracking_branch = NULL;
int error;
if (!git__prefixcmp(name, GIT_REFS_HEADS_DIR))
name += strlen(GIT_REFS_HEADS_DIR);
int error = create_tracking_branch(&tracking_branch, repo, target, name,
error = create_tracking_branch(&tracking_branch, repo, target, name,
signature, reflog_message);
if (!error)

View File

@ -40,6 +40,13 @@ typedef struct {
have_refs : 1;
} transport_local;
static void free_head(git_remote_head *head)
{
git__free(head->name);
git__free(head->symref_target);
git__free(head);
}
static int add_ref(transport_local *t, const char *name)
{
const char peeled[] = "^{}";
@ -83,8 +90,7 @@ static int add_ref(transport_local *t, const char *name)
git_reference_free(ref);
if ((error = git_vector_insert(&t->refs, head)) < 0) {
git__free(head->name);
git__free(head);
free_head(head);
return error;
}
@ -117,8 +123,7 @@ static int add_ref(transport_local *t, const char *name)
git_oid_cpy(&head->oid, git_object_id(target));
if ((error = git_vector_insert(&t->refs, head)) < 0) {
git__free(head->name);
git__free(head);
free_head(head);
}
}
@ -640,10 +645,8 @@ static void local_free(git_transport *transport)
size_t i;
git_remote_head *head;
git_vector_foreach(&t->refs, i, head) {
git__free(head->name);
git__free(head);
}
git_vector_foreach(&t->refs, i, head)
free_head(head);
git_vector_free(&t->refs);

View File

@ -26,17 +26,16 @@ int git_smart__store_refs(transport_smart *t, int flushes)
int error, flush = 0, recvd;
const char *line_end = NULL;
git_pkt *pkt = NULL;
git_pkt_ref *ref;
size_t i;
/* Clear existing refs in case git_remote_connect() is called again
* after git_remote_disconnect().
*/
git_vector_foreach(refs, i, ref) {
git__free(ref->head.name);
git__free(ref);
git_vector_foreach(refs, i, pkt) {
git_pkt_free(pkt);
}
git_vector_clear(refs);
pkt = NULL;
do {
if (buf->offset > 0)