commit c0876f4c1ecc4e8ccd484a059314ce6de9bdda50 from: Stefan Sperling via: Thomas Adam date: Mon Oct 31 17:41:54 2022 UTC avoid incomplete writes of pack file data in got-send-pack commit - f290038602962251b907d30417979dd89e1b0e6e commit + c0876f4c1ecc4e8ccd484a059314ce6de9bdda50 blob - 38aeb3b91a5ae69cc0c0fa0f109e862bdbb8e295 blob + d23a25ebbb9e0f35c608509ec09007188e890e52 --- libexec/got-send-pack/got-send-pack.c +++ libexec/got-send-pack/got-send-pack.c @@ -50,6 +50,7 @@ #include "got_lib_pkt.h" #include "got_lib_gitproto.h" #include "got_lib_ratelimit.h" +#include "got_lib_poll.h" #ifndef nitems #define nitems(_a) (sizeof((_a)) / sizeof((_a)[0])) @@ -144,7 +145,7 @@ send_pack_file(int sendfd, int packfd, struct imsgbuf { const struct got_error *err; unsigned char buf[8192]; - ssize_t r, w; + ssize_t r; off_t wtotal = 0; struct got_ratelimit rl; @@ -159,12 +160,10 @@ send_pack_file(int sendfd, int packfd, struct imsgbuf return got_error_from_errno("read"); if (r == 0) break; - w = write(sendfd, buf, r); - if (w == -1) - return got_error_from_errno("write"); - if (w != r) - return got_error(GOT_ERR_IO); - wtotal += w; + err = got_poll_write_full(sendfd, buf, r); + if (err) + return NULL; + wtotal += r; err = send_upload_progress(ibuf, wtotal, &rl); if (err) return err;