summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonrad Kuchciak <k.kuchciak@samsung.com>2017-09-13 16:00:24 +0200
committerKonrad Kuchciak <k.kuchciak@samsung.com>2017-09-15 09:34:08 +0200
commit0a811a044e0cf6df29e7f62ccc98d8c91a1ae9f1 (patch)
treed30108d6a5d0daa7dcd458a68a81b91336149526
parentc09733ce2a257c889a8814d3f9fddf3cdfe85c69 (diff)
downloadfaultd-0a811a044e0cf6df29e7f62ccc98d8c91a1ae9f1.tar.gz
faultd-0a811a044e0cf6df29e7f62ccc98d8c91a1ae9f1.tar.bz2
faultd-0a811a044e0cf6df29e7f62ccc98d8c91a1ae9f1.zip
Add possibility to log to /dev/kmsg
Change-Id: I531f80e6506f1379b3542abc57801c453daad500 Signed-off-by: Konrad Kuchciak <k.kuchciak@samsung.com>
-rw-r--r--src/util/log.c33
-rw-r--r--src/util/log.h1
2 files changed, 34 insertions, 0 deletions
diff --git a/src/util/log.c b/src/util/log.c
index ffe2dac..2317d9e 100644
--- a/src/util/log.c
+++ b/src/util/log.c
@@ -97,3 +97,36 @@ int log_internal(int level,
fflush(stderr);
return -error;
}
+
+int log_kmsg(const char *format, ...)
+{
+ FILE *fd = NULL;
+ char *buffer = NULL;
+ va_list ap;
+ int ret;
+
+ va_start(ap, format);
+ ret = vasprintf(&buffer, format, ap);
+ va_end(ap);
+
+ if (ret < 0) {
+ ret = errno;
+ goto cleanup;
+ }
+
+ fd = fopen("/dev/kmsg", "w");
+ if (!fd) {
+ ret = errno;
+ goto cleanup;
+ }
+
+ fprintf(fd, "faultd: %s\n", buffer);
+ fclose(fd);
+ ret = 0;
+
+cleanup:
+ if (buffer)
+ free(buffer);
+
+ return ret;
+}
diff --git a/src/util/log.h b/src/util/log.h
index 3537514..5c89a57 100644
--- a/src/util/log.h
+++ b/src/util/log.h
@@ -29,4 +29,5 @@ int log_get_max_level(void);
void log_set_max_level(int level);
int log_internal(int level, int error, const char *file, int __line, const char *func, const char *format, ...) __attribute__ ((format (printf, 6, 7)));
int log_parse_level_name(const char *name);
+int log_kmsg(const char *format, ...);
#endif /* _FAUTLD_LOG_H */