Commit 1cb5a8119445bb62c6868eb61649b9b901c855cb

XTao 2014-01-26T17:07:39

Fix write_object.

diff --git a/src/pack-objects.c b/src/pack-objects.c
index c4ed4dc..1774b07 100644
--- a/src/pack-objects.c
+++ b/src/pack-objects.c
@@ -288,6 +288,7 @@ static int write_object(
 	git_odb_object *obj = NULL;
 	git_otype type;
 	unsigned char hdr[10], *zbuf = NULL;
+	void *delta_data = NULL;
 	void *data;
 	size_t hdr_len, zbuf_len = COMPRESS_BUFLEN, data_len;
 	ssize_t written;
@@ -295,10 +296,11 @@ static int write_object(
 
 	if (po->delta) {
 		if (po->delta_data)
-			data = po->delta_data;
-		else if ((error = get_delta(&data, pb->odb, po)) < 0)
+			delta_data = po->delta_data;
+		else if ((error = get_delta(&delta_data, pb->odb, po)) < 0)
 				goto done;
 
+		data = delta_data;
 		data_len = po->delta_size;
 		type = GIT_OBJ_REF_DELTA;
 	} else {
@@ -351,7 +353,7 @@ static int write_object(
 		}
 
 		if (po->delta)
-			git__free(data);
+			git__free(delta_data);
 	}
 
 	if (po->delta_data) {
diff --git a/src/zstream.c b/src/zstream.c
index 7def044..0bca72f 100644
--- a/src/zstream.c
+++ b/src/zstream.c
@@ -70,7 +70,7 @@ int git_zstream_deflatebuf(git_buf *out, const void *in, size_t in_len)
 	int error = 0;
 
 	if ((error = git_zstream_init(&zstream)) < 0)
-		goto done;
+		return error;
 
 	do {
 		if (out->asize - out->size < BUFFER_SIZE)
@@ -89,7 +89,6 @@ int git_zstream_deflatebuf(git_buf *out, const void *in, size_t in_len)
 	if (written < 0)
 		error = written;
 
-done:
 	git_zstream_free(&zstream);
 	return error;
 }