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.
This commit is contained in:
Stefano Cristiano 2019-12-25 17:09:52 +01:00 committed by Andreas Kling
parent aab412bd85
commit 1222b94ab8
Notes: sideshowbarker 2024-07-19 17:42:08 +09:00
3 changed files with 30 additions and 0 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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 {