61
62
replace_index_entry_in_base(istate, old, ce);
63
remove_name_hash(istate, old);
64
- free(old);
64
+ discard_cache_entry(old);
65
ce->ce_flags &= ~CE_HASHED;
66
set_index_entry(istate, nr, ce);
67
ce->ce_flags |= CE_UPDATE_IN_BASE;
74
struct cache_entry *old_entry = istate->cache[nr], *new_entry;
75
int namelen = strlen(new_name);
76
77
- new_entry = xmalloc(cache_entry_size(namelen));
77
+ new_entry = make_empty_cache_entry(istate, namelen);
78
copy_cache_entry(new_entry, old_entry);
79
new_entry->ce_flags &= ~CE_HASHED;
80
new_entry->ce_namelen = namelen;
623
624
/* Ok, create the new entry using the name of the existing alias */
625
len = ce_namelen(alias);
626
- new_entry = xcalloc(1, cache_entry_size(len));
626
+ new_entry = make_empty_cache_entry(istate, len);
627
memcpy(new_entry->name, alias->name, len);
628
copy_cache_entry(new_entry, ce);
629
save_or_free_index_entry(istate, ce);
640
641
int add_to_index(struct index_state *istate, const char *path, struct stat *st, int flags)
642
{
643
- int size, namelen, was_same;
643
+ int namelen, was_same;
644
mode_t st_mode = st->st_mode;
645
struct cache_entry *ce, *alias = NULL;
646
unsigned ce_option = CE_MATCH_IGNORE_VALID|CE_MATCH_IGNORE_SKIP_WORKTREE|CE_MATCH_RACY_IS_DIRTY;
662
while (namelen && path[namelen-1] == '/')
663
namelen--;
664
}
665
- size = cache_entry_size(namelen);
666
- ce = xcalloc(1, size);
665
+ ce = make_empty_cache_entry(istate, namelen);
666
memcpy(ce->name, path, namelen);
667
ce->ce_namelen = namelen;
668
if (!intent_only)
703
ce_mark_uptodate(alias);
704
alias->ce_flags |= CE_ADDED;
705
707
- free(ce);
706
+ discard_cache_entry(ce);
707
return 0;
708
}
709
}
710
if (!intent_only) {
711
if (index_path(&ce->oid, path, st, newflags)) {
713
- free(ce);
712
+ discard_cache_entry(ce);
713
return error("unable to index file %s", path);
714
}
715
} else
726
ce->ce_mode == alias->ce_mode);
727
728
if (pretend)
730
- free(ce);
729
+ discard_cache_entry(ce);
730
else if (add_index_entry(istate, ce, add_option)) {
732
- free(ce);
731
+ discard_cache_entry(ce);
732
return error("unable to add %s to index", path);
733
}
734
if (verbose && !was_same)
744
return add_to_index(istate, path, &st, flags);
745
}
746
748
-struct cache_entry *make_cache_entry(unsigned int mode,
747
+struct cache_entry *make_empty_cache_entry(struct index_state *istate, size_t len)
748
+{
749
+ return xcalloc(1, cache_entry_size(len));
750
+}
751
+
752
+struct cache_entry *make_empty_transient_cache_entry(size_t len)
753
+{
754
+ return xcalloc(1, cache_entry_size(len));
755
+}
756
+
757
+struct cache_entry *make_cache_entry(struct index_state *istate,
758
+ unsigned int mode,
759
const struct object_id *oid,
760
const char *path,
761
int stage,
762
unsigned int refresh_options)
763
{
754
- int size, len;
764
struct cache_entry *ce, *ret;
765
+ int len;
766
767
if (!verify_path(path, mode)) {
768
error("Invalid path '%s'", path);
770
}
771
772
len = strlen(path);
763
- size = cache_entry_size(len);
764
- ce = xcalloc(1, size);
773
+ ce = make_empty_cache_entry(istate, len);
774
775
oidcpy(&ce->oid, oid);
776
memcpy(ce->name, path, len);
780
781
ret = refresh_cache_entry(&the_index, ce, refresh_options);
782
if (ret != ce)
774
- free(ce);
783
+ discard_cache_entry(ce);
784
return ret;
785
}
786
787
+struct cache_entry *make_transient_cache_entry(unsigned int mode, const struct object_id *oid,
788
+ const char *path, int stage)
789
+{
790
+ struct cache_entry *ce;
791
+ int len;
792
+
793
+ if (!verify_path(path, mode)) {
794
+ error("Invalid path '%s'", path);
795
+ return NULL;
796
+ }
797
+
798
+ len = strlen(path);
799
+ ce = make_empty_transient_cache_entry(len);
800
+
801
+ oidcpy(&ce->oid, oid);
802
+ memcpy(ce->name, path, len);
803
+ ce->ce_flags = create_ce_flags(stage);
804
+ ce->ce_namelen = len;
805
+ ce->ce_mode = create_ce_mode(mode);
806
+
807
+ return ce;
808
+}
809
+
810
/*
811
* Chmod an index entry with either +x or -x.
812
*
1302
{
1303
struct stat st;
1304
struct cache_entry *updated;
1273
- int changed, size;
1305
+ int changed;
1306
int refresh = options & CE_MATCH_REFRESH;
1307
int ignore_valid = options & CE_MATCH_IGNORE_VALID;
1308
int ignore_skip_worktree = options & CE_MATCH_IGNORE_SKIP_WORKTREE;
1382
return NULL;
1383
}
1384
1353
- size = ce_size(ce);
1354
- updated = xmalloc(size);
1385
+ updated = make_empty_cache_entry(istate, ce_namelen(ce));
1386
copy_cache_entry(updated, ce);
1387
memcpy(updated->name, ce->name, ce->ce_namelen + 1);
1388
fill_stat_cache_info(updated, &st);
1668
return read_index_from(istate, get_index_file(), get_git_dir());
1669
}
1670
1640
-static struct cache_entry *cache_entry_from_ondisk(struct ondisk_cache_entry *ondisk,
1671
+static struct cache_entry *cache_entry_from_ondisk(struct index_state *istate,
1672
+ struct ondisk_cache_entry *ondisk,
1673
unsigned int flags,
1674
const char *name,
1675
size_t len)
1676
{
1645
- struct cache_entry *ce = xmalloc(cache_entry_size(len));
1677
+ struct cache_entry *ce = make_empty_cache_entry(istate, len);
1678
1679
ce->ce_stat_data.sd_ctime.sec = get_be32(&ondisk->ctime.sec);
1680
ce->ce_stat_data.sd_mtime.sec = get_be32(&ondisk->mtime.sec);
1716
return (const char *)ep + 1 - cp_;
1717
}
1718
1687
-static struct cache_entry *create_from_disk(struct ondisk_cache_entry *ondisk,
1719
+static struct cache_entry *create_from_disk(struct index_state *istate,
1720
+ struct ondisk_cache_entry *ondisk,
1721
unsigned long *ent_size,
1722
struct strbuf *previous_name)
1723
{
1748
/* v3 and earlier */
1749
if (len == CE_NAMEMASK)
1750
len = strlen(name);
1718
- ce = cache_entry_from_ondisk(ondisk, flags, name, len);
1751
+ ce = cache_entry_from_ondisk(istate, ondisk, flags, name, len);
1752
1753
*ent_size = ondisk_ce_size(ce);
1754
} else {
1755
unsigned long consumed;
1756
consumed = expand_name_field(previous_name, name);
1724
- ce = cache_entry_from_ondisk(ondisk, flags,
1757
+ ce = cache_entry_from_ondisk(istate, ondisk, flags,
1758
previous_name->buf,
1759
previous_name->len);
1760
1886
unsigned long consumed;
1887
1888
disk_ce = (struct ondisk_cache_entry *)((char *)mmap + src_offset);
1856
- ce = create_from_disk(disk_ce, &consumed, previous_name);
1889
+ ce = create_from_disk(istate, disk_ce, &consumed, previous_name);
1890
set_index_entry(istate, i, ce);
1891
1892
src_offset += consumed;
1992
istate->cache[i]->index <= istate->split_index->base->cache_nr &&
1993
istate->cache[i] == istate->split_index->base->cache[istate->cache[i]->index - 1])
1994
continue;
1962
- free(istate->cache[i]);
1995
+ discard_cache_entry(istate->cache[i]);
1996
}
1997
resolve_undo_clear_index(istate);
1998
istate->cache_nr = 0;
2682
for (i = 0; i < istate->cache_nr; i++) {
2683
struct cache_entry *ce = istate->cache[i];
2684
struct cache_entry *new_ce;
2652
- int size, len;
2685
+ int len;
2686
2687
if (!ce_stage(ce))
2688
continue;
2689
unmerged = 1;
2690
len = ce_namelen(ce);
2658
- size = cache_entry_size(len);
2659
- new_ce = xcalloc(1, size);
2691
+ new_ce = make_empty_cache_entry(istate, len);
2692
memcpy(new_ce->name, ce->name, len);
2693
new_ce->ce_flags = create_ce_flags(0) | CE_CONFLICTED;
2694
new_ce->ce_namelen = len;
2797
dst->untracked = src->untracked;
2798
src->untracked = NULL;
2799
}
2800
+
2801
+void discard_cache_entry(struct cache_entry *ce)
2802
+{
2803
+ free(ce);
2804
+}