[LTP] [PATCH v2 13/15] ujson: writer: Set errno when a flush fails
Andrea Cervesato
andrea.cervesato@suse.de
Tue Oct 13 14:02:09 CEST 2026
From: Andrea Cervesato <andrea.cervesato@suse.com>
ujson_writer_file_close() uses errno to decide whether flushing the
buffered data failed. out_writer_file_write() can fail without setting
errno, when write() returns 0 or more bytes than requested, so close
could report success even though data was lost. Set errno to EAGAIN or
EIO in these cases.
Fixes: c50a0e0751c8 ("libs: Vendor ujson library")
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
libs/ujson/ujson_writer.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/libs/ujson/ujson_writer.c b/libs/ujson/ujson_writer.c
index 7882a5ab5..eb446749f 100644
--- a/libs/ujson/ujson_writer.c
+++ b/libs/ujson/ujson_writer.c
@@ -404,13 +404,20 @@ static int out_writer_file_write(ujson_writer *self, int fd, const char *buf, ss
{
do {
ssize_t ret = write(fd, buf, buf_len);
- if (ret <= 0) {
+ if (ret < 0) {
err(self, "Failed to write to a file");
return 1;
}
+ if (ret == 0) {
+ err(self, "The write() syscall returned 0");
+ errno = EAGAIN;
+ return 1;
+ }
+
if (ret > buf_len) {
err(self, "Wrote more bytes than requested?!");
+ errno = EIO;
return 1;
}
--
2.51.0
More information about the ltp
mailing list