]> granicus.if.org Git - libevent/commitdiff
make it compile with mingw; from Nick
authorNiels Provos <provos@gmail.com>
Wed, 27 Sep 2006 03:07:38 +0000 (03:07 +0000)
committerNiels Provos <provos@gmail.com>
Wed, 27 Sep 2006 03:07:38 +0000 (03:07 +0000)
svn:r235

Makefile.am
WIN32-Code/misc.c
WIN32-Code/misc.h
WIN32-Code/win32.c
buffer.c
configure.in
evbuffer.c

index 1b4ab623cdfb5aa1d411075bbee263f15b3af32c..37b81e443147010ae89fba45b91beb6fe6885388 100644 (file)
@@ -1,6 +1,5 @@
 AUTOMAKE_OPTIONS = foreign no-dependencies
 
-SUBDIRS = . sample test
 
 bin_SCRIPTS = event_rpcgen.py
 
@@ -22,14 +21,30 @@ EXTRA_DIST = acconfig.h event.h event-internal.h log.h evsignal.h event.3 \
 
 lib_LTLIBRARIES = libevent.la
 
+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 event_tagging.c \
-        http.c evhttp.h http-internal.h evdns.c evdns.h
-libevent_la_LIBADD = @LTLIBOBJS@
+        http.c evhttp.h http-internal.h evdns.c evdns.h $(SYS_SRC)
+libevent_la_LIBADD = @LTLIBOBJS@ $(SYS_LIBS)
 libevent_la_LDFLAGS = -release @VERSION@ -version-info 1:3:0
 
 include_HEADERS = event.h evhttp.h evdns.h
 
-INCLUDES = -Icompat
+INCLUDES = -Icompat $(SYS_INCLUDES)
 
 man_MANS = event.3
 
index 7329242b4edd97eb8ea7a8616dad11c889ffe33c..6f63ddfe63481e2f654c5b9f323282dd673afdc7 100644 (file)
@@ -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)
index 84f1eb2a02d1cdc14e9e500b50d4348140030f38..aced574687c7683b4510cc00955c808616508c63 100644 (file)
@@ -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
index 1978bcae888037c584bebefd04001a14674fe055..701d1c3cd3fa1a8f055795bb803963b4cbb112aa 100644 (file)
@@ -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);
 
@@ -207,8 +208,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) {
@@ -253,8 +255,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)
@@ -304,9 +307,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;
@@ -389,13 +393,11 @@ win32_dealloc(void *arg)
        free(win32op);
 }
 
-static int
+static void
 signal_handler(int sig)
 {
        evsigcaught[sig]++;
        signal_caught = 1;
-
-       return 0;
 }
 
 int
index e641e91fe8c6832553b297a355674f93bd646fee..e09cc3d3fd3b46eaee7e3b91ebdee450a1b6516c 100644 (file)
--- 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')
index a3f0a39e4582d30ca790e9d2fa683405c49ac8cc..4ae8a6e78f53771dc210409a15d8714c54089317 100644 (file)
@@ -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
index 1cd39cf3cbd9a6130313714c5975451acc9db3f3..52712bce58567cf2f871b892a3ee0c4c9699c774 100644 (file)
@@ -163,12 +163,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;