/*
+ * ngIRCd -- The Next Generation IRC Daemon
+ * Copyright (c)2005-2006 Florian Westphal (westphal@foo.fh-furtwangen.de)
+ * Copyright (c)2006-2014 Alexander Barton (alex@barton.de) and Contributors.
+ *
* 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
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* Please read the file COPYING, README and AUTHORS for more information.
- *
- * Copyright (c) 2005 Florian Westphal (westphal@foo.fh-furtwangen.de)
*/
#include "portab.h"
* I/O abstraction interface.
*/
+/* Extra debug messages in event add/delete/callback code: 0=off / 1=on */
+#define DEBUG_IO 0
+
#include <assert.h>
-#include <stdlib.h>
#include <string.h>
-#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
+#include <sys/stat.h>
#include <fcntl.h>
#include "array.h"
#include "io.h"
#include "log.h"
-/* Enables extra debug messages in event add/delete/callback code. */
-/* #define DEBUG_IO */
-
typedef struct {
#ifdef PROTOTYPES
void (*callback)(int, short);
static int io_dispatch_kqueue(struct timeval *tv);
static bool io_event_change_kqueue(int, short, const int action);
+
+#ifndef EV_SET
+/* Taken from /usr/include/sys/event.h of FreeBSD 8.1 and required by all
+ * platforms that have kqueue but lack EV_SET() -- for example FreeBSD 4. */
+#define EV_SET(kevp, a, b, c, d, e, f) do { \
+ struct kevent *__kevp__ = (kevp); \
+ __kevp__->ident = (a); \
+ __kevp__->filter = (b); \
+ __kevp__->flags = (c); \
+ __kevp__->fflags = (d); \
+ __kevp__->data = (e); \
+ __kevp__->udata = (f); \
+} while(0)
+#endif
#endif
#ifdef IO_USE_POLL
#endif
#ifdef IO_USE_SELECT
+#include <sys/time.h>
#include "defines.h" /* for conn.h */
#include "proc.h" /* for PROC_STAT (needed by conf.h) */
#include "conn.h" /* for CONN_ID (needed by conf.h) */
static void io_docallback PARAMS((int fd, short what));
-#ifdef DEBUG_IO
+#if DEBUG_IO
static void
io_debug(const char *s, int fd, int what)
{
io_masterfd = kqueue();
Log(LOG_INFO,
- "IO subsystem: kqueue (initial maxfd %u, masterfd %d)",
+ "IO subsystem: kqueue (initial maxfd %u, masterfd %d).",
eventsize, io_masterfd);
if (io_masterfd >= 0)
library_initialized = true;