summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/String.cc2
-rw-r--r--lib/TaskMan.cc18
-rw-r--r--lib/generic.cc2
3 files changed, 17 insertions, 5 deletions
diff --git a/lib/String.cc b/lib/String.cc
index 08818eb..0b7b3e6 100644
--- a/lib/String.cc
+++ b/lib/String.cc
@@ -575,7 +575,7 @@ String String::trim() const {
String & String::iconv(const String & from, const String & _to) {
iconv_t cd;
String to = _to + "//TRANSLIT";
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
char * inbuf;
#else
const char * inbuf;
diff --git a/lib/TaskMan.cc b/lib/TaskMan.cc
index e3ebd9a..83fe5aa 100644
--- a/lib/TaskMan.cc
+++ b/lib/TaskMan.cc
@@ -326,7 +326,12 @@ void TaskMan::Init() throw (GeneralException) {
signal(SIGPIPE, taskman_sigpipe);
signal(SIGHUP, taskman_sighup);
signal(SIGUSR1, taskman_sigusr1);
-
+
+#ifdef __APPLE__
+ sigemptyset(&sigchildset);
+ sigaddset(&sigchildset, SIGCHLD);
+ sigprocmask(SIG_BLOCK, &sigchildset, 0);
+#else
sigset_t sigtempset;
sigemptyset(&sigchildset);
@@ -335,7 +340,8 @@ void TaskMan::Init() throw (GeneralException) {
sigprocmask(SIG_SETMASK, 0, &sigtempset);
sigaddset(&sigtempset, SIGCHLD);
sigprocmask(SIG_SETMASK, &sigtempset, 0);
-#endif
+#endif
+#endif
inited = true;
number = 0;
@@ -683,8 +689,14 @@ void TaskMan::MainLoop() throw (GeneralException) {
bool timeout_condition = no_burst && !Zombies.size() && !got_sigchild && !got_yield;
-#ifdef _WIN32
+#if defined(_WIN32) || defined(__APPLE__)
+#ifdef __APPLE__
+ sigprocmask(SIG_UNBLOCK, &sigchildset, 0);
+#endif
r = poll(ufsd, nfds, timeout_condition ? timeout : 0);
+#ifdef __APPLE__
+ sigprocmask(SIG_BLOCK, &sigchildset, 0);
+#endif
#else
struct timespec ttimeout = { 0, 0 };
if ((timeout != -1) && timeout_condition) {
diff --git a/lib/generic.cc b/lib/generic.cc
index 24a7456..689a83c 100644
--- a/lib/generic.cc
+++ b/lib/generic.cc
@@ -89,7 +89,7 @@ static bool wrapper_printer(printer_t * prt, int level, const char * msg, ...) {
bool r;
va_list ap;
- va_start(ap, prt);
+ va_start(ap, msg);
r = prt->printm(level, msg, ap);
va_end(ap);