summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--rtemsbsd/include/rtems/bsd/bsd.h9
-rw-r--r--rtemsbsd/rtems/syslog.c37
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;
+}