smart: clarify error handling in git_smart__connect
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
diff --git a/src/transports/smart.c b/src/transports/smart.c
index 619a81f..1800995 100644
--- a/src/transports/smart.c
+++ b/src/transports/smart.c
@@ -279,14 +279,13 @@ static int git_smart__connect(
return error;
/* Detect capabilities */
- if (git_smart__detect_caps(first, &t->caps, &symrefs) < 0) {
- free_symrefs(&symrefs);
- return -1;
+ if ((error = git_smart__detect_caps(first, &t->caps, &symrefs)) == 0) {
+ goto cleanup;
}
/* If the only ref in the list is capabilities^{} with OID_ZERO, remove it */
if (1 == t->refs.length && !strcmp(first->head.name, "capabilities^{}") &&
- git_oid_iszero(&first->head.oid)) {
+ git_oid_iszero(&first->head.oid)) {
git_vector_clear(&t->refs);
git_pkt_free((git_pkt *)first);
}
@@ -294,15 +293,17 @@ static int git_smart__connect(
/* Keep a list of heads for _ls */
git_smart__update_heads(t, &symrefs);
- free_symrefs(&symrefs);
- if (t->rpc && git_smart__reset_stream(t, false) < 0)
- return -1;
+ if (t->rpc && (error = git_smart__reset_stream(t, false)) < 0)
+ goto cleanup;
/* We're now logically connected. */
t->connected = 1;
- return 0;
+cleanup:
+ free_symrefs(&symrefs);
+
+ return error;
}
static int git_smart__ls(const git_remote_head ***out, size_t *size, git_transport *transport)