Stefan Schuermans commited on 2026-02-15 15:36:45
Showing 3 changed files, with 22 additions and 2 deletions.
| ... | ... |
@@ -13,6 +13,23 @@ |
| 13 | 13 |
#include <sys/file.h> |
| 14 | 14 |
#include <unistd.h> |
| 15 | 15 |
|
| 16 |
+static ssize_t write_all(int fd, const void *buf, size_t n) {
|
|
| 17 |
+ ssize_t written = 0; |
|
| 18 |
+ while (n > 0) {
|
|
| 19 |
+ ssize_t wr = write(fd, buf, n); |
|
| 20 |
+ if (wr < 0) {
|
|
| 21 |
+ return wr; |
|
| 22 |
+ } |
|
| 23 |
+ if (wr == 0) {
|
|
| 24 |
+ return written; |
|
| 25 |
+ } |
|
| 26 |
+ written += wr; |
|
| 27 |
+ buf = (const uint8_t *)buf + wr; |
|
| 28 |
+ n -= wr; |
|
| 29 |
+ } |
|
| 30 |
+ return written; |
|
| 31 |
+} |
|
| 32 |
+ |
|
| 16 | 33 |
struct uptpl_event_header_s {
|
| 17 | 34 |
uint8_t magic[4]; /**< u p t 0 */ |
| 18 | 35 |
uint8_t size[4]; /**< size of payload in network byte oder */ |
| ... | ... |
@@ -42,8 +59,9 @@ void uptpl_write(void const *data, size_t size) {
|
| 42 | 59 |
(size >> 8) & 0xFF, |
| 43 | 60 |
size & 0xFF, |
| 44 | 61 |
}}; |
| 45 |
- ssize_t written = write(fd, &uptpl_event_header, sizeof(uptpl_event_header)); |
|
| 46 |
- written += write(fd, data, size); |
|
| 62 |
+ ssize_t written = |
|
| 63 |
+ write_all(fd, &uptpl_event_header, sizeof(uptpl_event_header)); |
|
| 64 |
+ written += write_all(fd, data, size); |
|
| 47 | 65 |
(void)written; /* if writing failed, nobody there to receive the error */ |
| 48 | 66 |
flock(fd, LOCK_UN); |
| 49 | 67 |
close(fd); |
| 50 | 68 |