@@ -1386,7 +1386,9 @@ static void final(const char *final_pack_name, const char *curr_pack_name,
13861386 unsigned char * sha1 )
13871387{
13881388 const char * report = "pack" ;
1389- char name [PATH_MAX ];
1389+ struct strbuf pack_name = STRBUF_INIT ;
1390+ struct strbuf index_name = STRBUF_INIT ;
1391+ struct strbuf keep_name_buf = STRBUF_INIT ;
13901392 int err ;
13911393
13921394 if (!from_stdin ) {
@@ -1402,43 +1404,36 @@ static void final(const char *final_pack_name, const char *curr_pack_name,
14021404 int keep_fd , keep_msg_len = strlen (keep_msg );
14031405
14041406 if (!keep_name )
1405- keep_fd = odb_pack_keep (name , sizeof (name ), sha1 );
1406- else
1407- keep_fd = open (keep_name , O_RDWR |O_CREAT |O_EXCL , 0600 );
1407+ keep_name = odb_pack_name (& keep_name_buf , sha1 , "keep" );
14081408
1409+ keep_fd = odb_pack_keep (keep_name );
14091410 if (keep_fd < 0 ) {
14101411 if (errno != EEXIST )
14111412 die_errno (_ ("cannot write keep file '%s'" ),
1412- keep_name ? keep_name : name );
1413+ keep_name );
14131414 } else {
14141415 if (keep_msg_len > 0 ) {
14151416 write_or_die (keep_fd , keep_msg , keep_msg_len );
14161417 write_or_die (keep_fd , "\n" , 1 );
14171418 }
14181419 if (close (keep_fd ) != 0 )
14191420 die_errno (_ ("cannot close written keep file '%s'" ),
1420- keep_name ? keep_name : name );
1421+ keep_name );
14211422 report = "keep" ;
14221423 }
14231424 }
14241425
14251426 if (final_pack_name != curr_pack_name ) {
1426- if (!final_pack_name ) {
1427- snprintf (name , sizeof (name ), "%s/pack/pack-%s.pack" ,
1428- get_object_directory (), sha1_to_hex (sha1 ));
1429- final_pack_name = name ;
1430- }
1427+ if (!final_pack_name )
1428+ final_pack_name = odb_pack_name (& pack_name , sha1 , "pack" );
14311429 if (finalize_object_file (curr_pack_name , final_pack_name ))
14321430 die (_ ("cannot store pack file" ));
14331431 } else if (from_stdin )
14341432 chmod (final_pack_name , 0444 );
14351433
14361434 if (final_index_name != curr_index_name ) {
1437- if (!final_index_name ) {
1438- snprintf (name , sizeof (name ), "%s/pack/pack-%s.idx" ,
1439- get_object_directory (), sha1_to_hex (sha1 ));
1440- final_index_name = name ;
1441- }
1435+ if (!final_index_name )
1436+ final_index_name = odb_pack_name (& index_name , sha1 , "idx" );
14421437 if (finalize_object_file (curr_index_name , final_index_name ))
14431438 die (_ ("cannot store index file" ));
14441439 } else
@@ -1464,6 +1459,10 @@ static void final(const char *final_pack_name, const char *curr_pack_name,
14641459 input_offset += err ;
14651460 }
14661461 }
1462+
1463+ strbuf_release (& index_name );
1464+ strbuf_release (& pack_name );
1465+ strbuf_release (& keep_name_buf );
14671466}
14681467
14691468static int git_index_pack_config (const char * k , const char * v , void * cb )
0 commit comments