From: "Randall S. Becker" <redacted>
This change is required because some platforms do not support file writes of
arbitrary sizes (e.g, NonStop). xwrite ends up truncating the output to the
maximum single I/O size possible for the destination device. The result of
write_in_full() is also passed to the caller, which was previously ignored.
Signed-off-by: Randall S. Becker <redacted>
---
builtin/repack.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/builtin/repack.c b/builtin/repack.c
index ede36328a3..932d24c60b 100644
--- a/builtin/repack.c
+++ b/builtin/repack.c
@@ -307,6 +307,7 @@ static int write_oid(const struct object_id *oid,
struct packed_git *pack UNUSED,
uint32_t pos UNUSED, void *data)
{
+ int err;
struct child_process *cmd = data;
if (cmd->in == -1) {@@ -314,8 +315,12 @@ static int write_oid(const struct object_id *oid,
die(_("could not start pack-objects to repack promisor objects"));
}
- xwrite(cmd->in, oid_to_hex(oid), the_hash_algo->hexsz);
- xwrite(cmd->in, "\n", 1);
+ err = write_in_full(cmd->in, oid_to_hex(oid), the_hash_algo->hexsz);
+ if (err <= 0)
+ return err;
+ err = write_in_full(cmd->in, "\n", 1);
+ if (err <= 0)
+ return err;
return 0;
}
--
2.42.1