/*
* This file is part of DisOrder
- * Copyright (C) 2005 Richard Kettlewell
+ * Copyright (C) 2005, 2007, 2008 Richard Kettlewell
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* USA
*/
-#include <config.h>
-#include "types.h"
+#include "common.h"
#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
#include "mem.h"
#include "vector.h"
}
static void veventlog(const char *keyword, const char *raw, va_list ap) {
- struct eventlog_output *p;
+ struct eventlog_output *p, *pnext;
struct dynstr d;
const char *param;
dynstr_append_string(&d, raw);
}
dynstr_terminate(&d);
- for(p = outputs; p; p = p->next)
+ for(p = outputs; p; p = pnext) {
+ /* We must be able to cope with eventlog_remove() being called from inside
+ * the callback */
+ pnext = p->next;
p->fn(d.vec, p->user);
+ }
}
void eventlog_raw(const char *keyword, const char *raw, ...) {