]> git.llucax.com Git - software/libev.git/commitdiff
big win32 check-in rel-0_5
authorroot <root>
Tue, 6 Nov 2007 16:27:10 +0000 (16:27 +0000)
committerroot <root>
Tue, 6 Nov 2007 16:27:10 +0000 (16:27 +0000)
README.embed
ev.c
ev_win32.c [new file with mode: 0644]

index 1d04427e79e9904500ec6ffe0199bb3e9b423c8a..0ab2878504b9a8cd73c764a7d6ce37fc6ff5451e 100644 (file)
@@ -27,6 +27,8 @@ FILESETS
         ev.c
         ev_vars.h
         ev_wrap.h
         ev.c
         ev_vars.h
         ev_wrap.h
+        ev_win32.c
+
         ev_select.c     only when select backend is enabled (which is by default)
         ev_poll.c       only when poll backend is enabled (disabled by default)
         ev_epoll.c      only when the epoll backend is enabled (disabled by default)
         ev_select.c     only when select backend is enabled (which is by default)
         ev_poll.c       only when poll backend is enabled (disabled by default)
         ev_epoll.c      only when the epoll backend is enabled (disabled by default)
diff --git a/ev.c b/ev.c
index 79b37867d209e946531549b07c6ecd370f72ac83..630a6db3029abf4711a53b76783a9b1c9d35baa5 100644 (file)
--- a/ev.c
+++ b/ev.c
@@ -150,64 +150,7 @@ typedef struct ev_watcher_time *WT;
 
 static int have_monotonic; /* did clock_gettime (CLOCK_MONOTONIC) work? */
 
 
 static int have_monotonic; /* did clock_gettime (CLOCK_MONOTONIC) work? */
 
-#if WIN32
-/* note: the comment below could not be substantiated, but what would I care */
-/* MSDN says this is required to handle SIGFPE */
-volatile double SIGFPE_REQ = 0.0f; 
-
-static int
-ev_socketpair_tcp (int filedes [2])
-{
-  struct sockaddr_in addr = { 0 };
-  int addr_size = sizeof (addr);
-  SOCKET listener;
-  SOCKET sock [2] = { -1, -1 };
-
-  if ((listener = socket (AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) 
-    return -1;
-
-  addr.sin_family = AF_INET;
-  addr.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
-  addr.sin_port = 0;
-
-  if (bind (listener, (struct sockaddr *)&addr, addr_size))
-    goto fail;
-
-  if (getsockname(listener, (struct sockaddr *)&addr, &addr_size))
-    goto fail;
-
-  if (listen (listener, 1))
-    goto fail;
-
-  if ((sock [0] = socket (AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) 
-    goto fail;
-
-  if (connect (sock[0], (struct sockaddr *)&addr, addr_size))
-    goto fail;
-
-  if ((sock[1] = accept (listener, 0, 0)) < 0)
-    goto fail;
-
-  closesocket (listener);
-
-  filedes [0] = sock [0];
-  filedes [1] = sock [1];
-
-  return 0;
-
-fail:
-  closesocket (listener);
-
-  if (sock [0] != INVALID_SOCKET) closesocket (sock [0]);
-  if (sock [1] != INVALID_SOCKET) closesocket (sock [1]);
-
-  return -1;
-}
-
-# define ev_pipe(filedes) ev_socketpair_tcp (filedes)
-#else
-# define ev_pipe(filedes) pipe (filedes)
-#endif
+#include "ev_win32.c"
 
 /*****************************************************************************/
 
 
 /*****************************************************************************/
 
@@ -830,7 +773,7 @@ loop_fork (EV_P)
       close (sigpipe [0]);
       close (sigpipe [1]);
 
       close (sigpipe [0]);
       close (sigpipe [1]);
 
-      while (ev_pipe (sigpipe))
+      while (pipe (sigpipe))
         syserr ("(libev) error creating pipe");
 
       siginit (EV_A);
         syserr ("(libev) error creating pipe");
 
       siginit (EV_A);
@@ -883,7 +826,7 @@ int
 ev_default_loop (int methods)
 {
   if (sigpipe [0] == sigpipe [1])
 ev_default_loop (int methods)
 {
   if (sigpipe [0] == sigpipe [1])
-    if (ev_pipe (sigpipe))
+    if (pipe (sigpipe))
       return 0;
 
   if (!default_loop)
       return 0;
 
   if (!default_loop)
diff --git a/ev_win32.c b/ev_win32.c
new file mode 100644 (file)
index 0000000..5821128
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * libev win32 compatibility cruft
+ *
+ * Copyright (c) 2007 Marc Alexander Lehmann <libev@schmorp.de>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef WIN32
+
+#include <sys/timeb.h>
+
+/* note: the comment below could not be substantiated, but what would I care */
+/* MSDN says this is required to handle SIGFPE */
+volatile double SIGFPE_REQ = 0.0f; 
+
+/* oh, the humanity! */
+static int
+ev_pipe (int filedes [2])
+{
+  struct sockaddr_in addr = { 0 };
+  int addr_size = sizeof (addr);
+  SOCKET listener;
+  SOCKET sock [2] = { -1, -1 };
+
+  if ((listener = socket (AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) 
+    return -1;
+
+  addr.sin_family = AF_INET;
+  addr.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
+  addr.sin_port = 0;
+
+  if (bind (listener, (struct sockaddr *)&addr, addr_size))
+    goto fail;
+
+  if (getsockname(listener, (struct sockaddr *)&addr, &addr_size))
+    goto fail;
+
+  if (listen (listener, 1))
+    goto fail;
+
+  if ((sock [0] = socket (AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) 
+    goto fail;
+
+  if (connect (sock[0], (struct sockaddr *)&addr, addr_size))
+    goto fail;
+
+  if ((sock[1] = accept (listener, 0, 0)) < 0)
+    goto fail;
+
+  closesocket (listener);
+
+  filedes [0] = sock [0];
+  filedes [1] = sock [1];
+
+  return 0;
+
+fail:
+  closesocket (listener);
+
+  if (sock [0] != INVALID_SOCKET) closesocket (sock [0]);
+  if (sock [1] != INVALID_SOCKET) closesocket (sock [1]);
+
+  return -1;
+}
+
+#undef pipe
+#define pipe(filedes) ev_pipe (filedes)
+
+static int
+ev_gettimeofday (struct timeval *tv, struct timezone *tz)
+{
+  struct _timeb tb;
+
+  _ftime (&tb);
+
+  tv->tv_sec  = (long)tb.time;
+  tv->tv_usec = ((long)tb.millitm) * 1000;
+
+  return 0;
+}
+
+#undef gettimeofday
+#define gettimeofdy(tv,tz) ev_gettimeofday (tv, tz)
+
+#endif