]> git.ipfire.org Git - thirdparty/git.git/commitdiff
sideband: avoid short write(2)
authorJunio C Hamano <gitster@pobox.com>
Sat, 2 Mar 2024 19:03:47 +0000 (11:03 -0800)
committerJunio C Hamano <gitster@pobox.com>
Sat, 2 Mar 2024 19:12:16 +0000 (11:12 -0800)
The sideband demultiplexor writes the data it receives on sideband
with xwrite().  We can lose data if the underlying write(2) results
in a short write.

If they are limited to unimportant bytes like eye-candy progress
meter, it may be OK to lose them, but lets be careful and ensure
that we use write_in_full() instead.  Note that the original does
not check for errors, and this rewrite does not check for one.  At
least not yet.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
sideband.c

index 266a67342be7245ae3c1dfae5a1a5ad6647f95df..5d8907151fec3982e906025fc19c2165ef4572d3 100644 (file)
@@ -220,7 +220,7 @@ int demultiplex_sideband(const char *me, int status,
                        }
 
                        strbuf_addch(scratch, *brk);
-                       xwrite(2, scratch->buf, scratch->len);
+                       write_in_full(2, scratch->buf, scratch->len);
                        strbuf_reset(scratch);
 
                        b = brk + 1;
@@ -247,7 +247,7 @@ cleanup:
                die("%s", scratch->buf);
        if (scratch->len) {
                strbuf_addch(scratch, '\n');
-               xwrite(2, scratch->buf, scratch->len);
+               write_in_full(2, scratch->buf, scratch->len);
        }
        strbuf_release(scratch);
        return 1;