[rtems-libbsd commit] Fix syslog() priority handling

Sebastian Huber sebh at rtems.org
Wed Oct 10 12:20:57 UTC 2018


Module:    rtems-libbsd
Branch:    master
Commit:    f949b432dea51eac666ec8454922a69a6d4b1251
Changeset: http://git.rtems.org/rtems-libbsd/commit/?id=f949b432dea51eac666ec8454922a69a6d4b1251

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Wed Oct 10 11:37:37 2018 +0200

Fix syslog() priority handling

Ths syslog priority is a mask not a level.

---

 rtemsbsd/rtems/syslog.c | 40 ++++++++++++++++++++++++++++++----------
 1 file changed, 30 insertions(+), 10 deletions(-)

diff --git a/rtemsbsd/rtems/syslog.c b/rtemsbsd/rtems/syslog.c
index f356690..738f7db 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);
 }



More information about the vc mailing list