diff --git a/drivers/syslog/syslog_write.c b/drivers/syslog/syslog_write.c index 8b3fefda709..94e6c0d330e 100644 --- a/drivers/syslog/syslog_write.c +++ b/drivers/syslog/syslog_write.c @@ -107,7 +107,7 @@ ssize_t syslog_write_foreach(FAR const char *buffer, syslog_write_t write; syslog_putc_t putc; size_t nwritten = 0; - size_t nwritten_max = 0; + ssize_t nwritten_max = -EIO; ssize_t ret; int i; @@ -153,7 +153,7 @@ ssize_t syslog_write_foreach(FAR const char *buffer, if (ret < 0) { - return ret; + continue; } nwritten = head + 1; @@ -166,7 +166,7 @@ ssize_t syslog_write_foreach(FAR const char *buffer, ret = write(channel, buffer + nwritten, buflen - nwritten); if (ret < 0) { - return ret; + continue; } else { diff --git a/libs/libc/stream/lib_syslograwstream.c b/libs/libc/stream/lib_syslograwstream.c index 76b149f1d3a..270205f83a4 100644 --- a/libs/libc/stream/lib_syslograwstream.c +++ b/libs/libc/stream/lib_syslograwstream.c @@ -123,7 +123,12 @@ static void syslograwstream_addchar(FAR struct lib_syslograwstream_s *stream, /* Yes.. then flush the buffer */ - syslograwstream_flush(&stream->common); + int ret = syslograwstream_flush(&stream->common); + if (ret < 0) + { + stream->offset = 0; + stream->common.nput = 0; + } } } @@ -136,7 +141,6 @@ syslograwstream_addstring(FAR struct lib_syslograwstream_s *stream, FAR const char *buff, size_t len) { ssize_t ret = 0; - do { size_t remain = CONFIG_SYSLOG_BUFSIZE - stream->offset; @@ -155,7 +159,13 @@ syslograwstream_addstring(FAR struct lib_syslograwstream_s *stream, /* Yes.. then flush the buffer */ - syslograwstream_flush(&stream->common); + int ret_flush = syslograwstream_flush(&stream->common); + if (ret_flush < 0) + { + stream->offset = 0; + stream->common.nput = 0; + break; + } } } while (ret < len);