[IOMultiplexerV2] added callback system for IOLog
authorpk910 <philipp@zoelle1.de>
Fri, 14 Mar 2014 23:21:12 +0000 (00:21 +0100)
committerpk910 <philipp@zoelle1.de>
Fri, 14 Mar 2014 23:23:16 +0000 (00:23 +0100)
src/IOHandler/IOLog.c

index 20637c14578f5f5585a2564d331dc713831432b2..2bc6deb4ed425d8a36607df299689585b30a3d29 100644 (file)
 
 #include <stdarg.h>
 #include <stdio.h>
+#include <stdlib.h>
+
+struct iolog_callback_entry {
+       iolog_callback *callback;
+       struct iolog_callback_entry *next;
+};
+static struct iolog_callback_entry *iolog_callbacks = NULL;
 
 void iolog_init() {
 
@@ -40,9 +47,18 @@ void iolog_trigger(enum IOLogType type, char *text, ...) {
     logBuf[pos] = '\n';
     logBuf[pos+1] = '\0';
     
-    printf("%s", logBuf);
+    struct iolog_callback_entry *callback;
+       for(callback = iolog_callbacks; callback; callback = callback->next)
+               callback->callback(type, logBuf);
 }
 
 void iolog_register_callback(iolog_callback *callback) {
-
+       struct iolog_callback_entry *logcb = malloc(sizeof(*logcb));
+       if(!logcb) {
+               iolog_trigger(IOLOG_ERROR, "Failed to allocate memory for iolog_callback_entry in %s:%d", __FILE__, __LINE__);
+               return;
+       }
+       logcb->callback = callback;
+       logcb->next = iolog_callbacks;
+       iolog_callbacks = logcb;
 }