reftable: handle interrupted writes

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>

Patrick Steinhardt committed Dec 11, 2023 at 10:07 UTC 85a8c899cedf46b79dd333549ed24b7ea7697862
2 files changed +4 -4
reftable/stack.c
+3 -3
@@ -42,7 +42,7 @@ static void stack_filename(struct strbuf *dest, struct reftable_stack *st,
42 static ssize_t reftable_fd_write(void *arg, const void *data, size_t sz)
43 {
44 int *fdp = (int *)arg;
45 - return write(*fdp, data, sz);
45 + return write_in_full(*fdp, data, sz);
46 }
47
48 int reftable_new_stack(struct reftable_stack **dest, const char *dir,
@@ -554,7 +554,7 @@ int reftable_addition_commit(struct reftable_addition *add)
554 strbuf_addstr(&table_list, "\n");
555 }
556
557 - err = write(add->lock_file_fd, table_list.buf, table_list.len);
557 + err = write_in_full(add->lock_file_fd, table_list.buf, table_list.len);
558 strbuf_release(&table_list);
559 if (err < 0) {
560 err = REFTABLE_IO_ERROR;
@@ -1024,7 +1024,7 @@ static int stack_compact_range(struct reftable_stack *st, int first, int last,
1024 strbuf_addstr(&ref_list_contents, "\n");
1025 }
1026
1027 - err = write(lock_file_fd, ref_list_contents.buf, ref_list_contents.len);
1027 + err = write_in_full(lock_file_fd, ref_list_contents.buf, ref_list_contents.len);
1028 if (err < 0) {
1029 err = REFTABLE_IO_ERROR;
1030 unlink(new_table_path.buf);
reftable/stack_test.c
+1 -1
@@ -78,7 +78,7 @@ static void test_read_file(void)
78 int i = 0;
79
80 EXPECT(fd > 0);
81 - n = write(fd, out, strlen(out));
81 + n = write_in_full(fd, out, strlen(out));
82 EXPECT(n == strlen(out));
83 err = close(fd);
84 EXPECT(err >= 0);