]> git.ipfire.org Git - thirdparty/git.git/blobdiff - pack-revindex.c
pack-revindex: hide the definition of 'revindex_entry'
[thirdparty/git.git] / pack-revindex.c
index ecdde39cf446f31e4c07f4d80cdb3767272c9cc8..a508d5f0a4df27c53b2271aaff4dceb242cecd45 100644 (file)
@@ -3,6 +3,11 @@
 #include "object-store.h"
 #include "packfile.h"
 
+struct revindex_entry {
+       off_t offset;
+       unsigned int nr;
+};
+
 /*
  * Pack index for existing packs give us easy access to the offsets into
  * corresponding pack file where each object's data starts, but the entries
@@ -169,16 +174,23 @@ int load_pack_revindex(struct packed_git *p)
        return 0;
 }
 
-int find_revindex_position(struct packed_git *p, off_t ofs)
+int offset_to_pack_pos(struct packed_git *p, off_t ofs, uint32_t *pos)
 {
-       int lo = 0;
-       int hi = p->num_objects + 1;
-       const struct revindex_entry *revindex = p->revindex;
+       unsigned lo, hi;
+       const struct revindex_entry *revindex;
+
+       if (load_pack_revindex(p) < 0)
+               return -1;
+
+       lo = 0;
+       hi = p->num_objects + 1;
+       revindex = p->revindex;
 
        do {
                const unsigned mi = lo + (hi - lo) / 2;
                if (revindex[mi].offset == ofs) {
-                       return mi;
+                       *pos = mi;
+                       return 0;
                } else if (ofs < revindex[mi].offset)
                        hi = mi;
                else
@@ -189,17 +201,20 @@ int find_revindex_position(struct packed_git *p, off_t ofs)
        return -1;
 }
 
-struct revindex_entry *find_pack_revindex(struct packed_git *p, off_t ofs)
+uint32_t pack_pos_to_index(struct packed_git *p, uint32_t pos)
 {
-       int pos;
-
-       if (load_pack_revindex(p))
-               return NULL;
-
-       pos = find_revindex_position(p, ofs);
-
-       if (pos < 0)
-               return NULL;
+       if (!p->revindex)
+               BUG("pack_pos_to_index: reverse index not yet loaded");
+       if (p->num_objects <= pos)
+               BUG("pack_pos_to_index: out-of-bounds object at %"PRIu32, pos);
+       return p->revindex[pos].nr;
+}
 
-       return p->revindex + pos;
+off_t pack_pos_to_offset(struct packed_git *p, uint32_t pos)
+{
+       if (!p->revindex)
+               BUG("pack_pos_to_index: reverse index not yet loaded");
+       if (p->num_objects < pos)
+               BUG("pack_pos_to_offset: out-of-bounds object at %"PRIu32, pos);
+       return p->revindex[pos].offset;
 }