11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*	$NetBSD: eventlib_p.h,v 1.1.1.1 2004/05/20 19:34:32 christos Exp $	*/
21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Copyright (c) 1995-1999 by Internet Software Consortium
61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Permission to use, copy, modify, and distribute this software for any
81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * purpose with or without fee is hereby granted, provided that the above
91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * copyright notice and this permission notice appear in all copies.
101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* eventlib_p.h - private interfaces for eventlib
211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * vix 09sep95 [initial]
221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Id: eventlib_p.h,v 1.3.2.1.4.1 2004/03/09 08:33:43 marka Exp
241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef _EVENTLIB_P_H
271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define _EVENTLIB_P_H
281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/param.h>
301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/types.h>
311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/socket.h>
321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <netinet/in.h>
331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/un.h>
341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define EVENTLIB_DEBUG 1
361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <errno.h>
381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <fcntl.h>
391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <stdio.h>
401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <stdlib.h>
411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <string.h>
421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <isc/heap.h>
441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <isc/list.h>
451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <isc/memcluster.h>
461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	EV_MASK_ALL	(EV_READ | EV_WRITE | EV_EXCEPT)
491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define EV_ERR(e)		return (errno = (e), -1)
501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define OK(x)		if ((x) < 0) EV_ERR(errno); else (void)NULL
511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#if HAVE_MEM_GET_SET
541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	NEW(p)		if (((p) = memget(sizeof *(p))) != NULL) \
551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project				FILL(p); \
561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project			else \
571dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project				(void)NULL;
581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define OKNEW(p)	if (!((p) = memget(sizeof *(p)))) { \
591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project				errno = ENOMEM; \
601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project				return (-1); \
611dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project			} else \
621dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project				FILL(p)
631dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define FREE(p)		memput((p), sizeof *(p))
641dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
651dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#if EVENTLIB_DEBUG
661dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define FILL(p)		memset((p), 0xF5, sizeof *(p))
671dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#else
681dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define FILL(p)
691dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
701dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
711dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#else
721dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
731dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	NEW(p) 	p = malloc(sizeof *(p));
741dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define OKNEW(p) if (!((p) = malloc(sizeof *(p)))) { errno = ENOMEM; return (-1); }
751dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define FREE(p)	free(p)
761dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define FILL(p)
771dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
781dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
791dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
801dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
811dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef struct evConn {
821dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	evConnFunc	func;
831dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	void *		uap;
841dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int		fd;
851dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int		flags;
861dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define EV_CONN_LISTEN		0x0001		/* Connection is a listener. */
871dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define EV_CONN_SELECTED	0x0002		/* evSelectFD(conn->file). */
881dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define EV_CONN_BLOCK		0x0004		/* Listener fd was blocking. */
891dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	evFileID	file;
901dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	struct evConn *	prev;
911dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	struct evConn *	next;
921dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project} evConn;
931dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
941dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef struct evAccept {
951dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int		fd;
961dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	union {
971dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		struct sockaddr		sa;
981dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		struct sockaddr_in	in;
991dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef NO_SOCKADDR_UN
1001dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		struct sockaddr_un	un;
1011dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
1021dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	}		la;
1031dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	socklen_t	lalen;
1041dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	union {
1051dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		struct sockaddr		sa;
1061dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		struct sockaddr_in	in;
1071dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef NO_SOCKADDR_UN
1081dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		struct sockaddr_un	un;
1091dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
1101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	}		ra;
1111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	socklen_t	ralen;
1121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int		ioErrno;
1131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	evConn *	conn;
1141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	LINK(struct evAccept) link;
1151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project} evAccept;
1161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef struct evFile {
1181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	evFileFunc	func;
1191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	void *		uap;
1201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int		fd;
1211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int		eventmask;
1221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int		preemptive;
1231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	struct evFile *	prev;
1241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	struct evFile *	next;
1251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	struct evFile *	fdprev;
1261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	struct evFile *	fdnext;
1271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project} evFile;
1281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef struct evStream {
1301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	evStreamFunc	func;
1311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	void *		uap;
1321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	evFileID	file;
1331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	evTimerID	timer;
1341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int		flags;
1351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define EV_STR_TIMEROK	0x0001	/* IFF timer valid. */
1361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int		fd;
1371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	struct iovec *	iovOrig;
1381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int		iovOrigCount;
1391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	struct iovec *	iovCur;
1401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int		iovCurCount;
1411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int		ioTotal;
1421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int		ioDone;
1431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int		ioErrno;
1441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	struct evStream	*prevDone, *nextDone;
1451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	struct evStream	*prev, *next;
1461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project} evStream;
1471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef struct evTimer {
1491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	evTimerFunc	func;
1501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	void *		uap;
1511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	struct timespec	due, inter;
1521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int		index;
1531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int		mode;
1541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define EV_TMR_RATE	1
1551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project} evTimer;
1561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1571dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef struct evWait {
1581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	evWaitFunc	func;
1591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	void *		uap;
1601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	const void *	tag;
1611dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	struct evWait *	next;
1621dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project} evWait;
1631dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1641dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef struct evWaitList {
1651dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	evWait *		first;
1661dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	evWait *		last;
1671dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	struct evWaitList *	prev;
1681dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	struct evWaitList *	next;
1691dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project} evWaitList;
1701dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1711dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef struct evEvent_p {
1721dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	enum {  Accept, File, Stream, Timer, Wait, Free, Null  } type;
1731dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	union {
1741dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		struct {  evAccept *this;  }			accept;
1751dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		struct {  evFile *this; int eventmask;  }	file;
1761dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		struct {  evStream *this;  }			stream;
1771dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		struct {  evTimer *this;  }			timer;
1781dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		struct {  evWait *this;  }			wait;
1791dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		struct {  struct evEvent_p *next;  }		free;
1801dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		struct {  const void *placeholder;  }		null;
1811dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	} u;
1821dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project} evEvent_p;
1831dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1841dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef struct {
1851dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	/* Global. */
1861dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	const evEvent_p	*cur;
1871dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	/* Debugging. */
1881dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int		debug;
1891dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	FILE		*output;
1901dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	/* Connections. */
1911dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	evConn		*conns;
1921dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	LIST(evAccept)	accepts;
1931dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	/* Files. */
1941dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	evFile		*files, *fdNext;
1951dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	fd_set		rdLast, rdNext;
1961dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	fd_set		wrLast, wrNext;
1971dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	fd_set		exLast, exNext;
1981dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	fd_set		nonblockBefore;
1991dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int		fdMax, fdCount, highestFD;
2001dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	evFile		*fdTable[FD_SETSIZE];
2011dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifdef EVENTLIB_TIME_CHECKS
2021dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	struct timespec	lastSelectTime;
2031dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int		lastFdCount;
2041dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
2051dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	/* Streams. */
2061dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	evStream	*streams;
2071dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	evStream	*strDone, *strLast;
2081dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	/* Timers. */
2091dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	struct timespec	lastEventTime;
2101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	heap_context	timers;
2111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	/* Waits. */
2121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	evWaitList	*waitLists;
2131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	evWaitList	waitDone;
2141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project} evContext_p;
2151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* eventlib.c */
2171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define evPrintf __evPrintf
2181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectvoid evPrintf(const evContext_p *ctx, int level, const char *fmt, ...);
2191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* ev_timers.c */
2211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define evCreateTimers __evCreateTimers
2221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectheap_context evCreateTimers(const evContext_p *);
2231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define evDestroyTimers __evDestroyTimers
2241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectvoid evDestroyTimers(const evContext_p *);
2251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* ev_waits.c */
2271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define evFreeWait __evFreeWait
2281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source ProjectevWait *evFreeWait(evContext_p *ctx, evWait *old);
2291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* Global options */
2311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint		__evOptMonoTime;
2321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /*_EVENTLIB_P_H*/
234