Thread (11 messages) 11 messages, 4 authors, 2024-02-27

RE: [PATCH v1 1/4] builtin/index-pack.c: change xwrite to write_in_full to allow large sizes.

From: <hidden>
Date: 2024-02-26 22:51:17

On Monday, February 26, 2024 5:39 PM, Taylor Blau wrote:
On Mon, Feb 26, 2024 at 05:05:35PM -0500, Randall S. Becker wrote:
quoted
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.
Hmm. I'm not sure I understand what NonStop's behavior is here...
quoted
diff --git a/builtin/index-pack.c b/builtin/index-pack.c index
a3a37bd215..f80b8d101a 100644
--- a/builtin/index-pack.c
+++ b/builtin/index-pack.c
@@ -1571,7 +1571,7 @@ static void final(const char *final_pack_name, const char *curr_pack_name,
 		 * the last part of the input buffer to stdout.
 		 */
 		while (input_len) {
-			err = xwrite(1, input_buffer + input_offset, input_len);
+			err = write_in_full(1, input_buffer + input_offset, input_len);
 			if (err <= 0)
 				break;
 			input_len -= err;
--
2.42.1
The code above loops while input_len is non-zero, and correctly decrements it by the number of bytes written by xwrite() after each
iteration.

Assuming that xwrite()/write(2) works how I think it does on NonStop, I'm not sure I understand why this change is necessary.
NonStop has a limited SSIZE_MAX. xwrite only handles that much so anything beyond that gets dropped (not in the above code but in other builtins); hence the critical nature of getting this fix out. This particular change probably could be tightened up on a re-roll to just call write_in_full instead of the while loop. I can fix that for v2. The goal suggested by Phillip W was to change xwrite to write_in_full, so I guess I went a little too far. 


Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help