[PATCH] pack-write: use hashwrite_be32() instead of double-buffering array
- From
René Scharfe <l.s.r@web.de>
- Date
- Nov 1, 2020, 08:52 UTC
- Message-ID
- <aec69531-d621-ab26-efd4-96e1ae0ed3a4@web.de>
hashwrite() already buffers writes, so pass the fanout table entries individually via hashwrite_be32(), which also does the endianess conversion for us. This avoids a memory copy, shortens the code and reduces the number of magic numbers.
Signed-off-by: René Scharfe <l.s.r@web.de> --- Patch generated with -U8 for easier review.
pack-write.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/pack-write.c b/pack-write.c index a6cdb3c67c..23e19cc1ec 100644 --- a/pack-write.c +++ b/pack-write.c @@ -43,17 +43,16 @@ static int need_large_offset(off_t offset, const struct pack_idx_option *opts) */ const char *write_idx_file(const char *index_name, struct pack_idx_entry **objects, int nr_objects, const struct pack_idx_option *opts, const unsigned char *sha1) { struct hashfile *f; struct pack_idx_entry **sorted_by_sha, **list, **last; off_t last_obj_offset = 0; - uint32_t array[256]; int i, fd; uint32_t index_version; if (nr_objects) { sorted_by_sha = objects; list = sorted_by_sha; last = sorted_by_sha + nr_objects; for (i = 0; i < nr_objects; ++i) { @@ -101,20 +100,19 @@ const char *write_idx_file(const char *index_name, struct pack_idx_entry **objec for (i = 0; i < 256; i++) { struct pack_idx_entry **next = list; while (next < last) { struct pack_idx_entry *obj = *next; if (obj->oid.hash[0] != i) break; next++; } - array[i] = htonl(next - sorted_by_sha); + hashwrite_be32(f, next - sorted_by_sha); list = next; } - hashwrite(f, array, 256 * 4); /* * Write the actual SHA1 entries.. */ list = sorted_by_sha; for (i = 0; i < nr_objects; i++) { struct pack_idx_entry *obj = *list++; if (index_version < 2) -- 2.29.2