mirror of
https://github.com/git/git.git
synced 2026-06-30 19:58:12 +00:00
odb: use size_t for object_info.sizep and the size APIs
When `js/objects-larger-than-4gb-on-windows` widened the streaming, index-pack and unpack-objects code paths, in the interest of keeping the patches somewhat reasonably-sized, it left the public ODB API still typed in `unsigned long`. In particular `struct object_info::sizep` and the four wrappers built on top of it (`odb_read_object`, `odb_read_object_peeled`, `odb_read_object_info`, `odb_pretend_object`) still return the unpacked size through `unsigned long *`, so on Windows `cat-file -s` and the `git add` / `git status` paths for a >4 GiB blob silently cap at 4 GiB. Widen the field and the four wrappers. The previous commits already widened the `unpack_entry()` cascade and pack-objects' in-core size accessors, so most of the cascade arrives here with no further work: the temporary shims in `packed_object_info_with_index_pos()` and in `unpack_entry()`'s delta-base recovery path go away, the two `SET_SIZE(entry, cast_size_t_to_ulong(canonical_size))` calls in `check_object()` and the matching one in `drop_reused_delta()` collapse to plain `SET_SIZE`, and `oe_get_size_slow()`'s tail `cast_size_t_to_ulong()` is gone too. What remains narrow are the boundaries this series does not intend to touch: the diff, blame, textconv and fast-import machinery. Even so, this patch is unfortunately quite large. Assisted-by: Opus 4.7 Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
7a3a78cc76
commit
c6a4629e32
@@ -50,7 +50,7 @@ static void send_info(struct repository *r, struct packet_writer *writer,
|
||||
for_each_string_list_item (item, oid_str_list) {
|
||||
const char *oid_str = item->string;
|
||||
struct object_id oid;
|
||||
unsigned long object_size;
|
||||
size_t object_size;
|
||||
|
||||
if (get_oid_hex_algop(oid_str, &oid, r->hash_algo) < 0) {
|
||||
packet_writer_error(
|
||||
@@ -66,7 +66,8 @@ static void send_info(struct repository *r, struct packet_writer *writer,
|
||||
if (odb_read_object_info(r->objects, &oid, &object_size) < 0) {
|
||||
strbuf_addstr(&send_buffer, " ");
|
||||
} else {
|
||||
strbuf_addf(&send_buffer, " %lu", object_size);
|
||||
strbuf_addf(&send_buffer, " %"PRIuMAX,
|
||||
(uintmax_t)object_size);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user