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);