The xwrite() helper relieves us from having to worry about an interrupted write(2) system call that returns an EINTR error without writing any, in which case we need to retry the system call. It, just as the underlying write(2) system call, however can return without writing the bytes requested to be written fully. A code that uses xwrite() and wants to write the full contents of the buffer needs to take care of such a "short write" situation, typically by calling xwrite() in a loop. We recently audited all the calls to xwrite(), and have found two classes of potential "problems". This miniseries is about fixing them. * There are such loops around xwrite() as described above, which were written long time ago. The write_in_full() helper does implement such a loop in a reusable way, and we should just call it instead. * There are xwrite() calls whose return value is ignored. We would not be able to detect (and complete) "short write" in such callers, of course, but more importantly, we would not notice I/O failures. Again, use write_in_full() to deal with short writes, and check the return value from it to detect errors. Junio C Hamano (3): unpack: rewrite hand-rolled loop of xwrite()s with write_in_full() sideband: avoid short write(2) repack: check error writing to pack-objects subprocess builtin/index-pack.c | 17 +++-------------- builtin/repack.c | 5 +++-- builtin/unpack-objects.c | 8 +------- sideband.c | 4 ++-- 4 files changed, 9 insertions(+), 25 deletions(-) -- 2.44.0-84-gb387623c12