@@ -294,12 +294,13 @@ static void clear_ref_dir(struct ref_dir *dir)
294
294
* "refs/heads/") or "" for the top-level directory.
295
295
*/
296
296
static struct ref_entry * create_dir_entry (struct ref_cache * ref_cache ,
297
- const char * dirname , int incomplete )
297
+ const char * dirname , size_t len ,
298
+ int incomplete )
298
299
{
299
300
struct ref_entry * direntry ;
300
- int len = strlen (dirname );
301
301
direntry = xcalloc (1 , sizeof (struct ref_entry ) + len + 1 );
302
- memcpy (direntry -> name , dirname , len + 1 );
302
+ memcpy (direntry -> name , dirname , len );
303
+ direntry -> name [len ] = '\0' ;
303
304
direntry -> u .subdir .ref_cache = ref_cache ;
304
305
direntry -> flag = REF_DIR | (incomplete ? REF_INCOMPLETE : 0 );
305
306
return direntry ;
@@ -364,7 +365,7 @@ static struct ref_dir *search_for_subdir(struct ref_dir *dir,
364
365
* therefore, create an empty record for it but mark
365
366
* the record complete.
366
367
*/
367
- entry = create_dir_entry (dir -> ref_cache , subdirname , 0 );
368
+ entry = create_dir_entry (dir -> ref_cache , subdirname , len , 0 );
368
369
add_entry_to_dir (dir , entry );
369
370
}
370
371
return get_ref_dir (entry );
@@ -823,7 +824,7 @@ static struct ref_dir *get_packed_refs(struct ref_cache *refs)
823
824
const char * packed_refs_file ;
824
825
FILE * f ;
825
826
826
- refs -> packed = create_dir_entry (refs , "" , 0 );
827
+ refs -> packed = create_dir_entry (refs , "" , 0 , 0 );
827
828
if (* refs -> name )
828
829
packed_refs_file = git_path_submodule (refs -> name , "packed-refs" );
829
830
else
@@ -888,7 +889,8 @@ static void read_loose_refs(const char *dirname, struct ref_dir *dir)
888
889
} else if (S_ISDIR (st .st_mode )) {
889
890
strbuf_addch (& refname , '/' );
890
891
add_entry_to_dir (dir ,
891
- create_dir_entry (refs , refname .buf , 1 ));
892
+ create_dir_entry (refs , refname .buf ,
893
+ refname .len , 1 ));
892
894
} else {
893
895
if (* refs -> name ) {
894
896
hashclr (sha1 );
@@ -918,12 +920,12 @@ static struct ref_dir *get_loose_refs(struct ref_cache *refs)
918
920
* are about to read the only subdirectory that can
919
921
* hold references:
920
922
*/
921
- refs -> loose = create_dir_entry (refs , "" , 0 );
923
+ refs -> loose = create_dir_entry (refs , "" , 0 , 0 );
922
924
/*
923
925
* Create an incomplete entry for "refs/":
924
926
*/
925
927
add_entry_to_dir (get_ref_dir (refs -> loose ),
926
- create_dir_entry (refs , "refs/" , 1 ));
928
+ create_dir_entry (refs , "refs/" , 5 , 1 ));
927
929
}
928
930
return get_ref_dir (refs -> loose );
929
931
}
0 commit comments