On Thu, Jan 30, 2025 at 12:08:10PM +0800, shejialuo wrote: > diff --git a/refs/packed-backend.c b/refs/packed-backend.c > index 271c740728..b250f987b2 100644 > --- a/refs/packed-backend.c > +++ b/refs/packed-backend.c > @@ -1768,6 +1774,28 @@ static struct ref_iterator *packed_reflog_iterator_begin(struct ref_store *ref_s > return empty_ref_iterator_begin(); > } > > +struct fsck_packed_ref_entry { > + int line_number; This should rather be a `size_t`, or at least `unsigned`. > + > + struct snapshot_record record; > +}; > + > +static struct fsck_packed_ref_entry *create_fsck_packed_ref_entry(int line_number, > + const char *start) > +{ > + struct fsck_packed_ref_entry *entry = xcalloc(1, sizeof(*entry)); > + entry->line_number = line_number; > + entry->record.start = start; > + return entry; > +} > + > +static void free_fsck_packed_ref_entries(struct fsck_packed_ref_entry **entries, int nr) > +{ > + for (int i = 0; i < nr; i++) Let's use `size_t` for both `i` and `nr`. > + free(entries[i]); > + free(entries); > +} > + > static int packed_fsck_ref_next_line(struct fsck_options *o, > struct strbuf *packed_entry, const char *start, > const char *eof, const char **eol) > @@ -1893,13 +1921,60 @@ static int packed_fsck_ref_main_line(struct fsck_options *o, > return 0; > } > > +static int packed_fsck_ref_sorted(struct fsck_options *o, > + struct ref_store *ref_store, > + struct fsck_packed_ref_entry **entries, > + int nr) > +{ > + size_t hexsz = ref_store->repo->hash_algo->hexsz; > + struct strbuf packed_entry = STRBUF_INIT; > + struct fsck_ref_report report = { 0 }; > + struct strbuf refname1 = STRBUF_INIT; > + struct strbuf refname2 = STRBUF_INIT; > + int ret = 0; > + > + for (int i = 1; i < nr; i++) { Here, as well. Patrick