summaryrefslogtreecommitdiffstats
path: root/rtemsbsd/rtems/syslog.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-10-10 11:37:37 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-10-10 14:20:06 +0200
commitf949b432dea51eac666ec8454922a69a6d4b1251 (patch)
tree1105f6b83ea8ae5d8a879e87776ad6e470e42fa2 /rtemsbsd/rtems/syslog.c
parentsaf1761_otg: Use real interrupt handler (diff)
downloadrtems-libbsd-f949b432dea51eac666ec8454922a69a6d4b1251.tar.bz2
Fix syslog() priority handling
Ths syslog priority is a mask not a level.
Diffstat (limited to 'rtemsbsd/rtems/syslog.c')
-rw-r--r--rtemsbsd/rtems/syslog.c40
1 files changed, 30 insertions, 10 deletions
diff --git a/rtemsbsd/rtems/syslog.c b/rtemsbsd/rtems/syslog.c
index f356690f..738f7db1 100644
--- a/rtemsbsd/rtems/syslog.c
+++ b/rtemsbsd/rtems/syslog.c
@@ -7,7 +7,7 @@
*/
/*
- * Copyright (c) 2014, 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2014, 2018 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
@@ -46,12 +46,20 @@
#include <rtems/bsd/bsd.h>
-static int syslog_priority = LOG_NOTICE;
+static int syslog_mask = LOG_UPTO(LOG_NOTICE);
+
+static bool
+syslog_do_log(int priority)
+{
+
+ return (((LOG_MASK(LOG_PRI(priority)) & syslog_mask)) != 0);
+}
void
syslog(int priority, const char *format, ...)
{
- if (priority <= syslog_priority) {
+
+ if (syslog_do_log(priority)) {
va_list ap;
va_start(ap, format);
@@ -63,7 +71,8 @@ syslog(int priority, const char *format, ...)
void
vsyslog(int priority, const char *format, va_list ap)
{
- if (priority <= syslog_priority) {
+
+ if (syslog_do_log(priority)) {
rtems_bsd_vprintf(priority, format, ap);
}
}
@@ -83,20 +92,31 @@ closelog(void)
int
setlogmask(int mask)
{
- /* TODO */
+
+ /*
+ * Ignore settings via this function since it has a process-wide scope.
+ * System services (a DHCP client daemon for example) may set this and
+ * assume that they run in their own environment (process). This is
+ * not the case in RTEMS. The syslog mask can be set via
+ * rtems_bsd_setlogpriority().
+ */
+ return (0);
}
int
-rtems_bsd_setlogpriority(const char* priority)
+rtems_bsd_setlogpriority(const char *priority)
{
- CODE* c = &prioritynames[0];
+ const CODE *c;
+
+ c = &prioritynames[0];
while (c->c_name != NULL) {
if (strcasecmp(c->c_name, priority) == 0) {
- syslog_priority = c->c_val;
- return 0;
+ syslog_mask = LOG_UPTO(c->c_val);
+ return (0);
}
++c;
}
+
errno = ENOENT;
- return -1;
+ return (-1);
}