mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
e621c97d6e
Revise patch for libevent 1.1b to handle the "wait, I *do* have a gettimeofday()" case. svn:r8456
222 lines
5.0 KiB
Diff
222 lines
5.0 KiB
Diff
=== Makefile.am
|
|
==================================================================
|
|
--- Makefile.am (revision 8794)
|
|
+++ Makefile.am (local)
|
|
@@ -1,6 +1,5 @@
|
|
AUTOMAKE_OPTIONS = foreign no-dependencies
|
|
|
|
-SUBDIRS = . sample test
|
|
|
|
EXTRA_DIST = acconfig.h event.h event-internal.h log.h evsignal.h event.3 \
|
|
kqueue.c epoll_sub.c epoll.c select.c rtsig.c poll.c signal.c \
|
|
@@ -20,13 +19,29 @@
|
|
|
|
lib_LTLIBRARIES = libevent.la
|
|
|
|
-libevent_la_SOURCES = event.c buffer.c evbuffer.c log.c
|
|
-libevent_la_LIBADD = @LTLIBOBJS@
|
|
+if BUILD_WIN32
|
|
+
|
|
+SUBDIRS = . sample
|
|
+SYS_LIBS = -lws2_32
|
|
+SYS_SRC = WIN32-Code/misc.c WIN32-Code/win32.c
|
|
+SYS_INCLUDES = -IWIN32-Code
|
|
+
|
|
+else
|
|
+
|
|
+SUBDIRS = . sample test
|
|
+SYS_LIBS =
|
|
+SYS_SRC =
|
|
+SYS_INCLUDES =
|
|
+
|
|
+endif
|
|
+
|
|
+libevent_la_SOURCES = event.c buffer.c evbuffer.c log.c $(SYS_SRC)
|
|
+libevent_la_LIBADD = @LTLIBOBJS@ $(SYS_LIBS)
|
|
libevent_la_LDFLAGS = -release @VERSION@ -version-info 1:2:0
|
|
|
|
include_HEADERS = event.h
|
|
|
|
-INCLUDES = -Icompat
|
|
+INCLUDES = -Icompat $(SYS_INCLUDES)
|
|
|
|
man_MANS = event.3
|
|
|
|
=== WIN32-Code/misc.c
|
|
==================================================================
|
|
--- WIN32-Code/misc.c (revision 8794)
|
|
+++ WIN32-Code/misc.c (local)
|
|
@@ -4,6 +4,12 @@
|
|
#include <sys/timeb.h>
|
|
#include <time.h>
|
|
|
|
+#ifdef __GNUC__
|
|
+/*our prototypes for timeval and timezone are in here, just in case the above
|
|
+ headers don't have them*/
|
|
+#include "misc.h"
|
|
+#endif
|
|
+
|
|
/****************************************************************************
|
|
*
|
|
* Function: gettimeofday(struct timeval *, struct timezone *)
|
|
@@ -17,6 +23,7 @@
|
|
*
|
|
****************************************************************************/
|
|
|
|
+#ifndef HAVE_GETTIMEOFDAY
|
|
int gettimeofday(struct timeval *tv, struct timezone *tz) {
|
|
struct _timeb tb;
|
|
|
|
@@ -28,6 +35,7 @@
|
|
tv->tv_usec = ((int) tb.millitm) * 1000;
|
|
return 0;
|
|
}
|
|
+#endif
|
|
|
|
int
|
|
win_read(int fd, void *buf, unsigned int length)
|
|
=== WIN32-Code/misc.h
|
|
==================================================================
|
|
--- WIN32-Code/misc.h (revision 8794)
|
|
+++ WIN32-Code/misc.h (local)
|
|
@@ -1,6 +1,11 @@
|
|
#ifndef MISC_H
|
|
#define MISC_H
|
|
|
|
+struct timezone;
|
|
+struct timeval;
|
|
+
|
|
+#ifndef HAVE_GETTIMEOFDAY
|
|
int gettimeofday(struct timeval *,struct timezone *);
|
|
+#endif
|
|
|
|
#endif
|
|
=== WIN32-Code/win32.c
|
|
==================================================================
|
|
--- WIN32-Code/win32.c (revision 8794)
|
|
+++ WIN32-Code/win32.c (local)
|
|
@@ -60,7 +60,8 @@
|
|
/* MSDN says this is required to handle SIGFPE */
|
|
volatile double SIGFPE_REQ = 0.0f;
|
|
|
|
-int signal_handler(int sig);
|
|
+static void signal_handler(int sig);
|
|
+
|
|
void signal_process(void);
|
|
int signal_recalc(void);
|
|
|
|
@@ -205,8 +206,9 @@
|
|
}
|
|
|
|
int
|
|
-win32_insert(struct win32op *win32op, struct event *ev)
|
|
+win32_insert(void *op, struct event *ev)
|
|
{
|
|
+ struct win32op *win32op = op;
|
|
int i;
|
|
|
|
if (ev->ev_events & EV_SIGNAL) {
|
|
@@ -251,8 +253,9 @@
|
|
}
|
|
|
|
int
|
|
-win32_del(struct win32op *win32op, struct event *ev)
|
|
+win32_del(void *op, struct event *ev)
|
|
{
|
|
+ struct win32op *win32op = op;
|
|
int i, found;
|
|
|
|
if (ev->ev_events & EV_SIGNAL)
|
|
@@ -302,9 +305,10 @@
|
|
*/
|
|
|
|
int
|
|
-win32_dispatch(struct event_base *base, struct win32op *win32op,
|
|
+win32_dispatch(struct event_base *base, void *op,
|
|
struct timeval *tv)
|
|
{
|
|
+ struct win32op *win32op = op;
|
|
int res = 0;
|
|
int i;
|
|
int fd_count;
|
|
@@ -366,13 +370,11 @@
|
|
}
|
|
|
|
|
|
-static int
|
|
+static void
|
|
signal_handler(int sig)
|
|
{
|
|
evsigcaught[sig]++;
|
|
signal_caught = 1;
|
|
-
|
|
- return 0;
|
|
}
|
|
|
|
int
|
|
=== buffer.c
|
|
==================================================================
|
|
--- buffer.c (revision 8794)
|
|
+++ buffer.c (local)
|
|
@@ -197,7 +197,7 @@
|
|
u_char *data = EVBUFFER_DATA(buffer);
|
|
size_t len = EVBUFFER_LENGTH(buffer);
|
|
char *line;
|
|
- u_int i;
|
|
+ unsigned int i;
|
|
|
|
for (i = 0; i < len; i++) {
|
|
if (data[i] == '\r' || data[i] == '\n')
|
|
=== configure.in
|
|
==================================================================
|
|
--- configure.in (revision 8794)
|
|
+++ configure.in (local)
|
|
@@ -111,6 +111,21 @@
|
|
)
|
|
fi
|
|
|
|
+dnl - check if the macro WIN32 is defined on this compiler.
|
|
+dnl - (this is how we check for a windows version of GCC)
|
|
+AC_MSG_CHECKING(for WIN32)
|
|
+AC_TRY_COMPILE(,
|
|
+ [
|
|
+ #ifndef WIN32
|
|
+ #error
|
|
+ #endif
|
|
+ ],
|
|
+ bwin32=true; AC_MSG_RESULT(yes),
|
|
+ bwin32=false; AC_MSG_RESULT(no),
|
|
+)
|
|
+
|
|
+AM_CONDITIONAL(BUILD_WIN32, test x$bwin32 = xtrue)
|
|
+
|
|
dnl Checks for typedefs, structures, and compiler characteristics.
|
|
AC_C_CONST
|
|
AC_C_INLINE
|
|
=== evbuffer.c
|
|
==================================================================
|
|
--- evbuffer.c (revision 8794)
|
|
+++ evbuffer.c (local)
|
|
@@ -154,12 +154,20 @@
|
|
if (EVBUFFER_LENGTH(bufev->output)) {
|
|
res = evbuffer_write(bufev->output, fd);
|
|
if (res == -1) {
|
|
+#ifndef WIN32
|
|
+/*todo. evbuffer uses WriteFile when WIN32 is set. WIN32 system calls do not
|
|
+ *set errno. thus this error checking is not portable*/
|
|
if (errno == EAGAIN ||
|
|
errno == EINTR ||
|
|
errno == EINPROGRESS)
|
|
goto reschedule;
|
|
/* error case */
|
|
what |= EVBUFFER_ERROR;
|
|
+
|
|
+#else
|
|
+ goto reschedule;
|
|
+#endif
|
|
+
|
|
} else if (res == 0) {
|
|
/* eof case */
|
|
what |= EVBUFFER_EOF;
|
|
|