X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=update-index.c;h=1efac27c6baf26ed881099e91a3cbd5dbb3c2289;hb=42b5c78845feb44f1d36eecad4c72336d5c2a9c5;hp=bb730509b871381ffbd8457bd38ce940d78ba50d;hpb=3c91b216ab481eac0d9928471ecc7f1f12599445;p=git.git diff --git a/update-index.c b/update-index.c index bb730509..1efac27c 100644 --- a/update-index.c +++ b/update-index.c @@ -114,8 +114,7 @@ static int add_file_to_cache(const char *path) namelen = strlen(path); size = cache_entry_size(namelen); - ce = xmalloc(size); - memset(ce, 0, size); + ce = xcalloc(1, size); memcpy(ce->name, path, namelen); ce->ce_flags = htons(namelen); fill_stat_cache_info(ce, &st); @@ -161,8 +160,13 @@ static struct cache_entry *refresh_entry(struct cache_entry *ce, int really) return ERR_PTR(-errno); changed = ce_match_stat(ce, &st, really); - if (!changed) - return NULL; + if (!changed) { + if (really && assume_unchanged && + !(ce->ce_flags & htons(CE_VALID))) + ; /* mark this one VALID again */ + else + return NULL; + } if (ce_modified(ce, &st, really)) return ERR_PTR(-EINVAL); @@ -307,8 +311,7 @@ static int add_cacheinfo(unsigned int mode, const unsigned char *sha1, len = strlen(path); size = cache_entry_size(len); - ce = xmalloc(size); - memset(ce, 0, size); + ce = xcalloc(1, size); memcpy(ce->sha1, sha1, 20); memcpy(ce->name, path, len); @@ -572,9 +575,11 @@ int main(int argc, const char **argv) break; } if (!strcmp(path, "--index-info")) { + if (i != argc - 1) + die("--index-info must be at the end"); allow_add = allow_replace = allow_remove = 1; read_index_info(line_termination); - continue; + break; } if (!strcmp(path, "--ignore-missing")) { not_new = 1;