فهرست منبع

LibCore: Allow LibCore to be compiled on macOS host

Compiling LibCore on macOS is needed if one wants to compile host tools
(like IPCCompiler) on a non Linux host.
These changes could be possibly reverted once "event loop" functionality
and "base library" (Vector, String etc.) will be split in two separate libraries,
updating all relevant projects.
Stefano Cristiano 5 سال پیش
والد
کامیت
1222b94ab8
3فایلهای تغییر یافته به همراه30 افزوده شده و 0 حذف شده
  1. 7 0
      Libraries/LibCore/CEventLoop.cpp
  2. 10 0
      Libraries/LibCore/CLocalServer.cpp
  3. 13 0
      Libraries/LibCore/CLocalSocket.cpp

+ 7 - 0
Libraries/LibCore/CEventLoop.cpp

@@ -136,7 +136,14 @@ CEventLoop::CEventLoop()
 
     if (!s_main_event_loop) {
         s_main_event_loop = this;
+#if defined(SOCK_NONBLOCK)
         int rc = pipe2(s_wake_pipe_fds, O_CLOEXEC);
+#else
+        int rc = pipe(s_wake_pipe_fds);
+        fcntl(s_wake_pipe_fds[0], F_SETFD, FD_CLOEXEC);
+        fcntl(s_wake_pipe_fds[1], F_SETFD, FD_CLOEXEC);
+
+#endif
         ASSERT(rc == 0);
         s_event_loop_stack->append(this);
 

+ 10 - 0
Libraries/LibCore/CLocalServer.cpp

@@ -5,6 +5,9 @@
 #include <sys/socket.h>
 #include <sys/stat.h>
 #include <unistd.h>
+#ifndef SOCK_NONBLOCK
+#include <sys/ioctl.h>
+#endif
 
 CLocalServer::CLocalServer(CObject* parent)
     : CObject(parent)
@@ -71,7 +74,14 @@ bool CLocalServer::listen(const String& address)
 
     int rc;
 
+#ifdef SOCK_NONBLOCK
     m_fd = socket(AF_LOCAL, SOCK_STREAM | SOCK_NONBLOCK | SOCK_CLOEXEC, 0);
+#else
+    m_fd = socket(AF_LOCAL, SOCK_STREAM, 0);
+    int option = 1;
+    ioctl(m_fd, FIONBIO, &option);
+    fcntl(m_fd, F_SETFD, FD_CLOEXEC);
+#endif
     ASSERT(m_fd >= 0);
 
     auto socket_address = CSocketAddress::local(address);

+ 13 - 0
Libraries/LibCore/CLocalSocket.cpp

@@ -2,6 +2,10 @@
 #include <sys/socket.h>
 #include <errno.h>
 
+#ifndef SOCK_NONBLOCK
+#include <sys/ioctl.h>
+#endif
+
 CLocalSocket::CLocalSocket(int fd, CObject* parent)
     : CSocket(CSocket::Type::Local, parent)
 {
@@ -15,7 +19,16 @@ CLocalSocket::CLocalSocket(int fd, CObject* parent)
 CLocalSocket::CLocalSocket(CObject* parent)
     : CSocket(CSocket::Type::Local, parent)
 {
+    
+#ifdef SOCK_NONBLOCK
     int fd = socket(AF_LOCAL, SOCK_STREAM | SOCK_NONBLOCK | SOCK_CLOEXEC, 0);
+#else
+    int fd = socket(AF_LOCAL, SOCK_STREAM, 0);
+    int option = 1;
+    ioctl(fd, FIONBIO, &option);
+    fcntl(fd, F_SETFD, FD_CLOEXEC);
+#endif
+
     if (fd < 0) {
         set_error(errno);
     } else {