Make "git-prune-script" take all refs into account.
[gitweb.git] / read-cache.c
index 44a713aed6d5d3f051dd7a709ceb9044869cf783..53f1da815bc2c23b25894663fa2cac17b08e64b2 100644 (file)
@@ -87,7 +87,7 @@ int cache_name_pos(const char *name, int namelen)
 }
 
 /* Remove entry, return true if there are more entries to go.. */
-static int remove_entry_at(int pos)
+int remove_entry_at(int pos)
 {
        active_nr--;
        if (pos >= active_nr)
@@ -106,7 +106,7 @@ int remove_file_from_cache(char *path)
        return 0;
 }
 
-static int same_name(struct cache_entry *a, struct cache_entry *b)
+int same_name(struct cache_entry *a, struct cache_entry *b)
 {
        int len = ce_namelen(a);
        return ce_namelen(b) == len && !memcmp(a->name, b->name, len);
@@ -143,7 +143,7 @@ int add_cache_entry(struct cache_entry *ce, int ok_to_add)
        /* Make sure the array is big enough .. */
        if (active_nr == active_alloc) {
                active_alloc = alloc_nr(active_alloc);
-               active_cache = realloc(active_cache, active_alloc * sizeof(struct cache_entry *));
+               active_cache = xrealloc(active_cache, active_alloc * sizeof(struct cache_entry *));
        }
 
        /* Add it in.. */
@@ -188,7 +188,7 @@ int read_cache(void)
                sha1_file_directory = DEFAULT_DB_ENVIRONMENT;
        if (access(sha1_file_directory, X_OK) < 0)
                return error("no access to SHA1 file directory");
-       fd = open(".git/index", O_RDONLY);
+       fd = open(get_index_file(), O_RDONLY);
        if (fd < 0)
                return (errno == ENOENT) ? 0 : error("open failed");
 
@@ -198,7 +198,7 @@ int read_cache(void)
                size = st.st_size;
                errno = EINVAL;
                if (size >= sizeof(struct cache_header) + 20)
-                       map = mmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0);
+                       map = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
        }
        close(fd);
        if (-1 == (int)(long)map)