This change reorganizes the handling of sparse output, in the
case where the last block in a file is a block of zeroes.
The intent of the previous code in that case was to force
an explicit write, but the implementation was incorrect, and
as a result the write was never performed. This new implementation
instead uses ftruncate(2) to extend the file with a trailing hole.
PR: 189284
(original PR whose fix introduced this bug)
PR: 207092