@@ -1444,7 +1444,11 @@ static int resolve_missing_loose_ref(const char *refname,
14441444}
14451445
14461446/* This function needs to return a meaningful errno on failure */
1447- const char * resolve_ref_unsafe (const char * refname , int resolve_flags , unsigned char * sha1 , int * flags )
1447+ static const char * resolve_ref_unsafe_1 (const char * refname ,
1448+ int resolve_flags ,
1449+ unsigned char * sha1 ,
1450+ int * flags ,
1451+ struct strbuf * sb_path )
14481452{
14491453 int depth = MAXDEPTH ;
14501454 ssize_t len ;
@@ -1475,7 +1479,7 @@ const char *resolve_ref_unsafe(const char *refname, int resolve_flags, unsigned
14751479 bad_name = 1 ;
14761480 }
14771481 for (;;) {
1478- char path [ PATH_MAX ] ;
1482+ const char * path ;
14791483 struct stat st ;
14801484 char * buf ;
14811485 int fd ;
@@ -1485,7 +1489,9 @@ const char *resolve_ref_unsafe(const char *refname, int resolve_flags, unsigned
14851489 return NULL ;
14861490 }
14871491
1488- git_snpath (path , sizeof (path ), "%s" , refname );
1492+ strbuf_reset (sb_path );
1493+ strbuf_git_path (sb_path , "%s" , refname );
1494+ path = sb_path -> buf ;
14891495
14901496 /*
14911497 * We might have to loop back here to avoid a race
@@ -1612,6 +1618,16 @@ const char *resolve_ref_unsafe(const char *refname, int resolve_flags, unsigned
16121618 }
16131619}
16141620
1621+ const char * resolve_ref_unsafe (const char * refname , int resolve_flags ,
1622+ unsigned char * sha1 , int * flags )
1623+ {
1624+ struct strbuf sb_path = STRBUF_INIT ;
1625+ const char * ret = resolve_ref_unsafe_1 (refname , resolve_flags ,
1626+ sha1 , flags , & sb_path );
1627+ strbuf_release (& sb_path );
1628+ return ret ;
1629+ }
1630+
16151631char * resolve_refdup (const char * ref , int resolve_flags , unsigned char * sha1 , int * flags )
16161632{
16171633 const char * ret = resolve_ref_unsafe (ref , resolve_flags , sha1 , flags );
@@ -2941,11 +2957,15 @@ static int copy_msg(char *buf, const char *msg)
29412957}
29422958
29432959/* This function must set a meaningful errno on failure */
2944- int log_ref_setup (const char * refname , char * logfile , int bufsize )
2960+ int log_ref_setup (const char * refname , struct strbuf * sb_logfile )
29452961{
29462962 int logfd , oflags = O_APPEND | O_WRONLY ;
2963+ char * logfile ;
29472964
2948- git_snpath (logfile , bufsize , "logs/%s" , refname );
2965+ strbuf_git_path (sb_logfile , "logs/%s" , refname );
2966+ logfile = sb_logfile -> buf ;
2967+ /* make sure the rest of the function can't change "logfile" */
2968+ sb_logfile = NULL ;
29492969 if (log_all_ref_updates &&
29502970 (starts_with (refname , "refs/heads/" ) ||
29512971 starts_with (refname , "refs/remotes/" ) ||
@@ -2990,22 +3010,26 @@ int log_ref_setup(const char *refname, char *logfile, int bufsize)
29903010 return 0 ;
29913011}
29923012
2993- static int log_ref_write (const char * refname , const unsigned char * old_sha1 ,
2994- const unsigned char * new_sha1 , const char * msg )
3013+ static int log_ref_write_1 (const char * refname , const unsigned char * old_sha1 ,
3014+ const unsigned char * new_sha1 , const char * msg ,
3015+ struct strbuf * sb_log_file )
29953016{
29963017 int logfd , result , written , oflags = O_APPEND | O_WRONLY ;
29973018 unsigned maxlen , len ;
29983019 int msglen ;
2999- char log_file [ PATH_MAX ] ;
3020+ const char * log_file ;
30003021 char * logrec ;
30013022 const char * committer ;
30023023
30033024 if (log_all_ref_updates < 0 )
30043025 log_all_ref_updates = !is_bare_repository ();
30053026
3006- result = log_ref_setup (refname , log_file , sizeof ( log_file ) );
3027+ result = log_ref_setup (refname , sb_log_file );
30073028 if (result )
30083029 return result ;
3030+ log_file = sb_log_file -> buf ;
3031+ /* make sure the rest of the function can't change "log_file" */
3032+ sb_log_file = NULL ;
30093033
30103034 logfd = open (log_file , oflags );
30113035 if (logfd < 0 )
@@ -3038,6 +3062,15 @@ static int log_ref_write(const char *refname, const unsigned char *old_sha1,
30383062 return 0 ;
30393063}
30403064
3065+ static int log_ref_write (const char * refname , const unsigned char * old_sha1 ,
3066+ const unsigned char * new_sha1 , const char * msg )
3067+ {
3068+ struct strbuf sb = STRBUF_INIT ;
3069+ int ret = log_ref_write_1 (refname , old_sha1 , new_sha1 , msg , & sb );
3070+ strbuf_release (& sb );
3071+ return ret ;
3072+ }
3073+
30413074int is_branch (const char * refname )
30423075{
30433076 return !strcmp (refname , "HEAD" ) || starts_with (refname , "refs/heads/" );
0 commit comments