]> git.ipfire.org Git - thirdparty/git.git/commitdiff
reftable: handle interrupted writes
authorPatrick Steinhardt <ps@pks.im>
Mon, 11 Dec 2023 09:07:38 +0000 (10:07 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 11 Dec 2023 15:23:16 +0000 (07:23 -0800)
There are calls to write(3P) where we don't properly handle interrupts.
Convert them to use `write_in_full()`.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
reftable/stack.c
reftable/stack_test.c

index ed108a929bbf467030341534cf51852a9e905282..f0cadad490e08dc1dae00fa4564635d74f49c45a 100644 (file)
@@ -42,7 +42,7 @@ static void stack_filename(struct strbuf *dest, struct reftable_stack *st,
 static ssize_t reftable_fd_write(void *arg, const void *data, size_t sz)
 {
        int *fdp = (int *)arg;
-       return write(*fdp, data, sz);
+       return write_in_full(*fdp, data, sz);
 }
 
 int reftable_new_stack(struct reftable_stack **dest, const char *dir,
@@ -554,7 +554,7 @@ int reftable_addition_commit(struct reftable_addition *add)
                strbuf_addstr(&table_list, "\n");
        }
 
-       err = write(add->lock_file_fd, table_list.buf, table_list.len);
+       err = write_in_full(add->lock_file_fd, table_list.buf, table_list.len);
        strbuf_release(&table_list);
        if (err < 0) {
                err = REFTABLE_IO_ERROR;
@@ -1024,7 +1024,7 @@ static int stack_compact_range(struct reftable_stack *st, int first, int last,
                strbuf_addstr(&ref_list_contents, "\n");
        }
 
-       err = write(lock_file_fd, ref_list_contents.buf, ref_list_contents.len);
+       err = write_in_full(lock_file_fd, ref_list_contents.buf, ref_list_contents.len);
        if (err < 0) {
                err = REFTABLE_IO_ERROR;
                unlink(new_table_path.buf);
index d0b717510fa7d6dd8832bf77490630964e33b23b..0644c8ad2e0a806dc767071836973689ab07905f 100644 (file)
@@ -78,7 +78,7 @@ static void test_read_file(void)
        int i = 0;
 
        EXPECT(fd > 0);
-       n = write(fd, out, strlen(out));
+       n = write_in_full(fd, out, strlen(out));
        EXPECT(n == strlen(out));
        err = close(fd);
        EXPECT(err >= 0);