Re: [PATCH v1 1/4] builtin/index-pack.c: change xwrite to write_in_full to allow large sizes.
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Feb 26, 2024, 23:46 UTC
- Message-ID
- <xmqqa5nmkcuz.fsf@gitster.g>
- In-Reply-To
- <026b01da6906$4d96f530$e8c4df90$@nexbridge.com>
<rsbecker@nexbridge.com> writes:
Show 10 quoted lines
>>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)
xwrite() caps a single write attempt to MAX_IO_SIZE and can return a short-write, so anything beyound MAX_IO_SIZE will not even be sent to the underlying write(2). There is a heuristic based on the value of SSIZE_MAX to define MAX_IO_SIZE in <git-compat-util.h>, and if the value given by that heuristics is too large for your platform, you can tweak your own MAX_IO_SIZE (see the comments in that header file).
The caller of xwrite() must be prepared to see a write return with value less than the length it used to call the function, either because of this MAX_IO_SIZE cut-off, or because of the underlying write(2) returning after a short write. As long as the caller is prepared, like Taylor pointed out, I am not sure why you'd need to change it.