From 9c50a992af6f1152bedd8b12be27c6ebe03cb425 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20K=C4=85dzio=C5=82ka?= Date: Thu, 17 Sep 2020 19:56:31 +0200 Subject: [PATCH] pb12: check the return value of write --- BootROMs/pb12.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/BootROMs/pb12.c b/BootROMs/pb12.c index 3f6d5f8e..3a72fab2 100644 --- a/BootROMs/pb12.c +++ b/BootROMs/pb12.c @@ -4,6 +4,7 @@ #include #include #include +#include void opts(uint8_t byte, uint8_t *options) { @@ -13,6 +14,17 @@ void opts(uint8_t byte, uint8_t *options) *(options++) = byte & (byte >> 1); } +void write_all(int fd, const void *buf, size_t count) { + while (count) { + ssize_t written = write(fd, buf, count); + if (written < 0) { + err(1, "write"); + } + count -= written; + buf += written; + } +} + int main() { static uint8_t source[0x4000]; @@ -76,15 +88,15 @@ int main() if (bits >= 8) { uint8_t outctl = control >> (bits - 8); assert(outctl != 1); - write(STDOUT_FILENO, &outctl, 1); - write(STDOUT_FILENO, literals, literals_size); + write_all(STDOUT_FILENO, &outctl, 1); + write_all(STDOUT_FILENO, literals, literals_size); bits -= 8; control &= (1 << bits) - 1; literals_size = 0; } } uint8_t end_byte = 1; - write(STDOUT_FILENO, &end_byte, 1); + write_all(STDOUT_FILENO, &end_byte, 1); return 0; }