nikawhite pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=132bac98c8a77adde5a8271c48ed0d3c7dfb6563

commit 132bac98c8a77adde5a8271c48ed0d3c7dfb6563
Author: Mykyta Biliavskyi <[email protected]>
Date:   Fri Nov 4 11:06:11 2016 +0200

    Evas events: fix for works with pipes on windows.
    
    Evil implementation of pipe() function uses sockets. Windows functions
    "write", "read" and "close" doesn't works with sockets. In this commit
    added macros, that replace "read" with "recv", "write" with "send" and
    "close" with "closesocket".
    
    @fix
---
 src/lib/evas/canvas/evas_async_events.c | 30 +++++++++++++++++++++++++-----
 1 file changed, 25 insertions(+), 5 deletions(-)

diff --git a/src/lib/evas/canvas/evas_async_events.c 
b/src/lib/evas/canvas/evas_async_events.c
index d607dab..b7ce6b5 100644
--- a/src/lib/evas/canvas/evas_async_events.c
+++ b/src/lib/evas/canvas/evas_async_events.c
@@ -5,12 +5,32 @@
 #ifndef _MSC_VER
 # include <unistd.h>
 #endif
-#include <fcntl.h>
 #include <errno.h>
 
 #include "evas_common_private.h"
 #include "evas_private.h"
 
+#ifdef _WIN32
+
+# include <winsock2.h>
+
+# define pipe_write(fd, buffer, size) send((fd), (char *)(buffer), size, 0)
+# define pipe_read(fd, buffer, size)  recv((fd), (char *)(buffer), size, 0)
+# define pipe_close(fd)               closesocket(fd)
+# define PIPE_FD_ERROR   SOCKET_ERROR
+
+#else
+
+# include <fcntl.h>
+
+# define pipe_write(fd, buffer, size) write((fd), buffer, size)
+# define pipe_read(fd, buffer, size)  read((fd), buffer, size)
+# define pipe_close(fd)               close(fd)
+# define PIPE_FD_ERROR   -1
+
+#endif /* ! _WIN32 */
+
+
 typedef struct _Evas_Event_Async       Evas_Event_Async;
 struct _Evas_Event_Async
 {
@@ -129,8 +149,8 @@ evas_async_events_shutdown(void)
    eina_inarray_flush(&async_queue);
    free(async_queue_cache);
 
-   close(_fd_read);
-   close(_fd_write);
+   pipe_close(_fd_read);
+   pipe_close(_fd_write);
    _fd_read = -1;
    _fd_write = -1;
 
@@ -159,7 +179,7 @@ _evas_async_events_process_single(void)
 {
    int ret, wakeup;
 
-   ret = read(_fd_read, &wakeup, sizeof(int));
+   ret = pipe_read(_fd_read, &wakeup, sizeof(int));
    if (ret < 0)
      {
         switch (errno)
@@ -293,7 +313,7 @@ evas_async_events_put(const void *target, 
Evas_Callback_Type type, void *event_i
 
         do
           {
-             check = write(_fd_write, &wakeup, sizeof (int));
+             check = pipe_write(_fd_write, &wakeup, sizeof (int));
           }
         while ((check != sizeof (int)) &&
                ((errno == EINTR) || (errno == EAGAIN)));

-- 


Reply via email to