]> git.meshlink.io Git - catta/blobdiff - src/simple-watch.c
readpipe/writepite/closepipe for fake pipes on Windows
[catta] / src / simple-watch.c
index 77da9f84e0e3a099e71ee0f56b27bc13cd475a27..7719e56cb0e43b557d9f173f6b40e951dc484cad 100644 (file)
@@ -100,7 +100,7 @@ void catta_simple_poll_wakeup(CattaSimplePoll *s) {
     char c = 'W';
     assert(s);
 
-    write(s->wakeup_pipe[1], &c, sizeof(c));
+    writepipe(s->wakeup_pipe[1], &c, sizeof(c));
     s->wakeup_issued = 1;
 }
 
@@ -113,7 +113,7 @@ static void clear_wakeup(CattaSimplePoll *s) {
     s->wakeup_issued = 0;
 
     for(;;)
-        if (read(s->wakeup_pipe[0], &c, sizeof(c)) != sizeof(c))
+        if (readpipe(s->wakeup_pipe[0], c, sizeof(c)) != sizeof(c))
             break;
 }
 
@@ -309,8 +309,10 @@ CattaSimplePoll *catta_simple_poll_new(void) {
     if (!(s = catta_new(CattaSimplePoll, 1)))
         return NULL;
 
+    winsock_init();  // on Windows, pipe uses sockets; no-op on other platforms
     if (pipe(s->wakeup_pipe) < 0) {
         catta_free(s);
+        winsock_exit();
         return NULL;
     }
 
@@ -362,12 +364,13 @@ void catta_simple_poll_free(CattaSimplePoll *s) {
     catta_free(s->pollfds);
 
     if (s->wakeup_pipe[0] >= 0)
-        closesocket(s->wakeup_pipe[0]);
+        closepipe(s->wakeup_pipe[0]);
 
     if (s->wakeup_pipe[1] >= 0)
-        closesocket(s->wakeup_pipe[1]);
+        closepipe(s->wakeup_pipe[1]);
 
     catta_free(s);
+    winsock_exit();  // match the winsock_init in catta_simple_poll_new
 }
 
 static int rebuild(CattaSimplePoll *s) {