Hi, Thanks for the remarks. I'll stick to this micro project and follow the guidelines. Yes, the strbuf API is perfectly OK. I was not getting to work it properly, so I used malloc() / free() instead. My bad. I'll resubmit the patch. Thanks. On Fri, Feb 28, 2014 at 3:47 AM, Michael Haggerty <mhagger@xxxxxxxxxxxx> wrote: > On 02/27/2014 08:02 PM, Faiz Kothari wrote: >> Signed-off-by: Faiz Kothari <faiz.off93@xxxxxxxxx> >> --- >> 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. > > This is not OK. I promise you, the strbuf API works correctly if it is > used correctly. (And if it really *were* broken, you should fix the > problem or at least diagnose and document it rather than working around it.) > >> 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. > > Almost. This last set of comments should be moved to directly after the > "---" line. > > But: please rather stick to *one* microproject and get it perfect, and > leave the others to other students. > > Michael > > -- > Michael Haggerty > mhagger@xxxxxxxxxxxx > http://softwareswirl.blogspot.com/ -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html