From 26304113328aad8cd8aeee7904086cebe853af79 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Tue, 1 Jul 2014 15:09:07 -0600 Subject: [PATCH] RAMLOG: syslog_putc must set errno and return EOF on a failure --- drivers/syslog/ramlog.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/drivers/syslog/ramlog.c b/drivers/syslog/ramlog.c index e73637f2a54..4075590f2cc 100644 --- a/drivers/syslog/ramlog.c +++ b/drivers/syslog/ramlog.c @@ -42,6 +42,7 @@ #include #include +#include #include #include #include @@ -735,10 +736,10 @@ int ramlog_sysloginit(void) int syslog_putc(int ch) { FAR struct ramlog_dev_s *priv = &g_sysdev; -#ifdef CONFIG_RAMLOG_CRLF int ret; - /* Ignore carriage returns */ +#ifdef CONFIG_RAMLOG_CRLF + /* Ignore carriage returns. But return success. */ if (ch == '\r') { @@ -754,13 +755,28 @@ int syslog_putc(int ch) { /* The buffer is full and nothing was saved. */ - return ch; + goto errout; } } #endif - (void)ramlog_addchar(priv, ch); - return ch; + /* Add the character to the RAMLOG */ + + ret = ramlog_addchar(priv, ch); + if (ret >= 0) + { + /* Return the character added on success */ + + return ch; + } + + /* On a failure, we need to return EOF and set the errno so that + * work like all other putc-like functions. + */ + +errout: + set_errno(-ret); + return EOF; } #endif