Thread (3 messages) flat view 3 messages, 2 authors, 2016-06-15
STALE3745d

[PATCH] GSoC2014 Microproject rewrite finish_bulk_checkin()

From: Faiz Kothari <hidden>
Date: 2016-06-15 23:00:01
Subsystem: the rest · Maintainer: Linus Torvalds

Signed-off-by: Faiz Kothari <redacted>
---
 bulk-checkin.c |   12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/bulk-checkin.c b/bulk-checkin.c
index 118c625..feeff9f 100644
--- a/bulk-checkin.c
+++ b/bulk-checkin.c
@@ -23,7 +23,7 @@ static struct bulk_checkin_state {
 static void finish_bulk_checkin(struct bulk_checkin_state *state)
 {
 	unsigned char sha1[20];
-	char packname[PATH_MAX];
+	struct strbuf packname;
 	int i;
 
 	if (!state->f)
@@ -42,9 +42,11 @@ static void finish_bulk_checkin(struct bulk_checkin_state *state)
 					 state->offset);
 		close(fd);
 	}
-
-	sprintf(packname, "%s/pack/pack-", get_object_directory());
-	finish_tmp_packfile(packname, state->pack_tmp_name,
+	
+	packname.len = packname.alloc = 64 + strlen(get_object_directory());
+	packname.buf = (char *)malloc(packname.len * sizeof(char));
+	sprintf(packname.buf, "%s/pack/pack-", get_object_directory());
+	finish_tmp_packfile(packname.buf, state->pack_tmp_name,
 			    state->written, state->nr_written,
 			    &state->pack_idx_opts, sha1);
 	for (i = 0; i < state->nr_written; i++)
@@ -53,7 +55,7 @@ static void finish_bulk_checkin(struct bulk_checkin_state *state)
 clear_exit:
 	free(state->written);
 	memset(state, 0, sizeof(*state));
-
+	free(packname.buf);
 	/* Make objects we just wrote available to ourselves */
 	reprepare_packed_git();
 }
-- 
1.7.9.5

> Rewrite bulk-checkin.c:finish_bulk_checkin() to use a strbuf for handling packname, and explain why this is useful.
> Also check if the first argument of pack-write.c:finish_tmp_packfile() can be made const.

Adding 64 to strlen(get_object_directory()) to accomodate sha1_to_hex(sha1) and itself.
Using the APIs for strbuf is giving me test failures(12/15) during t1050-large.sh 
So, I used the malloc() and free() instead.
Instead of having packname on stack and cause stackoverflow because of MAX_PATH ~ 4KB, have it on heap.
Can have first parameter to pack-write.c:finish_tmp_packfile() as const because packname is not required to be modified.

I apologise for my two earlier patches not being in proper format. I have finally got it working properly. Will make sure,
it does not happen again.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help