diff --git a/drivers/syslog/ramlog.c b/drivers/syslog/ramlog.c index e73637f2a5..4075590f2c 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