summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiels Provos <provos@gmail.com>2006-09-27 03:18:45 +0000
committerNiels Provos <provos@gmail.com>2006-09-27 03:18:45 +0000
commit0f33fc5b84ccdd73f6c899a275c11053710682b1 (patch)
treec00787b3f0323394e656adb68e4b841f917a617c
parentbe392175559cbf39ba906f2bc8ba49d2f9146f97 (diff)
downloadlibevent-patches-1.1.tar.gz
integrate from trunk: mingw support from Nickpatches-1.1
svn:r236
-rw-r--r--Makefile.am23
-rw-r--r--WIN32-Code/misc.c8
-rw-r--r--WIN32-Code/misc.h5
-rw-r--r--WIN32-Code/win32.c16
-rw-r--r--buffer.c2
-rw-r--r--configure.in15
-rw-r--r--evbuffer.c8
7 files changed, 65 insertions, 12 deletions
diff --git a/Makefile.am b/Makefile.am
index 3dbee885..d36eec03 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -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 @@ EXTRA_DIST = acconfig.h event.h event-internal.h log.h evsignal.h event.3 \
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
diff --git a/WIN32-Code/misc.c b/WIN32-Code/misc.c
index 7329242b..6f63ddfe 100644
--- a/WIN32-Code/misc.c
+++ b/WIN32-Code/misc.c
@@ -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 @@ int gettimeofday(struct timeval *tv, struct timezone *tz) {
tv->tv_usec = ((int) tb.millitm) * 1000;
return 0;
}
+#endif
int
win_read(int fd, void *buf, unsigned int length)
diff --git a/WIN32-Code/misc.h b/WIN32-Code/misc.h
index 84f1eb2a..aced5746 100644
--- a/WIN32-Code/misc.h
+++ b/WIN32-Code/misc.h
@@ -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
diff --git a/WIN32-Code/win32.c b/WIN32-Code/win32.c
index 90a663a5..d8740ac9 100644
--- a/WIN32-Code/win32.c
+++ b/WIN32-Code/win32.c
@@ -60,7 +60,8 @@ volatile sig_atomic_t signal_caught = 0;
/* 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 @@ win32_recalc(struct event_base *base, void *arg, int max)
}
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 @@ win32_insert(struct win32op *win32op, struct event *ev)
}
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 @@ fd_set_copy(struct win_fd_set *out, const struct win_fd_set *in)
*/
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 @@ win32_dispatch(struct event_base *base, struct win32op *win32op,
}
-static int
+static void
signal_handler(int sig)
{
evsigcaught[sig]++;
signal_caught = 1;
-
- return 0;
}
int
diff --git a/buffer.c b/buffer.c
index e641e91f..e09cc3d3 100644
--- a/buffer.c
+++ b/buffer.c
@@ -197,7 +197,7 @@ evbuffer_readline(struct evbuffer *buffer)
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')
diff --git a/configure.in b/configure.in
index a27959f9..4d6b2df6 100644
--- a/configure.in
+++ b/configure.in
@@ -111,6 +111,21 @@ if test "x$ac_cv_header_sys_time_h" = "xyes"; then
)
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
diff --git a/evbuffer.c b/evbuffer.c
index e9f7e43a..684b325d 100644
--- a/evbuffer.c
+++ b/evbuffer.c
@@ -154,12 +154,20 @@ bufferevent_writecb(int fd, short event, void *arg)
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;