diff options
-rw-r--r-- | rtemsbsd/include/rtems/bsd/bsd.h | 9 | ||||
-rw-r--r-- | rtemsbsd/rtems/syslog.c | 37 |
2 files changed, 40 insertions, 6 deletions
diff --git a/rtemsbsd/include/rtems/bsd/bsd.h b/rtemsbsd/include/rtems/bsd/bsd.h index 1583dc9e..f687eaf6 100644 --- a/rtemsbsd/include/rtems/bsd/bsd.h +++ b/rtemsbsd/include/rtems/bsd/bsd.h @@ -221,6 +221,15 @@ void rtems_bsd_set_vprintf_handler(int (*new_vprintf_handler) */ int rtems_bsd_vprintf(int level, const char *fmt, va_list ap); +/** + * @brief Set the syslog priority. See syslog.h for the names. + * + * @param priority One of the standard names. + * @retval 0 Priority set. + * @retval errno Otherwise. + */ +int rtems_bsd_setlogpriority(const char* priority); + /** @} */ #ifdef __cplusplus diff --git a/rtemsbsd/rtems/syslog.c b/rtemsbsd/rtems/syslog.c index 76162563..f356690f 100644 --- a/rtemsbsd/rtems/syslog.c +++ b/rtemsbsd/rtems/syslog.c @@ -37,25 +37,35 @@ * SUCH DAMAGE. */ +#include <errno.h> +#include <stddef.h> +#include <strings.h> + +#define SYSLOG_NAMES #include <syslog.h> #include <rtems/bsd/bsd.h> +static int syslog_priority = LOG_NOTICE; + void syslog(int priority, const char *format, ...) { - va_list ap; + if (priority <= syslog_priority) { + va_list ap; - va_start(ap, format); - vsyslog(priority, format, ap); - va_end(ap); + va_start(ap, format); + vsyslog(priority, format, ap); + va_end(ap); + } } void vsyslog(int priority, const char *format, va_list ap) { - - rtems_bsd_vprintf(priority, format, ap); + if (priority <= syslog_priority) { + rtems_bsd_vprintf(priority, format, ap); + } } void @@ -75,3 +85,18 @@ setlogmask(int mask) { /* TODO */ } + +int +rtems_bsd_setlogpriority(const char* priority) +{ + CODE* c = &prioritynames[0]; + while (c->c_name != NULL) { + if (strcasecmp(c->c_name, priority) == 0) { + syslog_priority = c->c_val; + return 0; + } + ++c; + } + errno = ENOENT; + return -1; +} |