From 0548c8431c112193a6fcb7dbac2544705235134d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zolt=C3=A1n=20Mizsei?= <zmizsei@extrowerk.com>
Date: Sun, 20 Nov 2016 14:04:51 +0100
Subject: Haiku patches


diff --git a/os-posix.c b/os-posix.c
index 92e9d85..8047238 100644
--- a/os-posix.c
+++ b/os-posix.c
@@ -42,6 +42,15 @@
 #include <sys/prctl.h>
 #endif
 
+#ifdef __HAIKU__
+#ifndef MCL_CURRENT
+#define MCL_CURRENT 8192
+#endif
+#ifndef MCL_FUTURE
+#define MCL_FUTURE 16384
+#endif
+#endif
+
 static struct passwd *user_pwd;
 static const char *chroot_dir;
 static int daemonize;
@@ -328,11 +337,12 @@ bool is_daemonized(void)
 int os_mlock(void)
 {
     int ret = 0;
-
+#ifndef __HAIKU__
     ret = mlockall(MCL_CURRENT | MCL_FUTURE);
     if (ret < 0) {
         perror("mlockall");
     }
+#endif
 
     return ret;
 }
diff --git a/target/mips/mips-semi.c b/target/mips/mips-semi.c
index a7aefba..16c2336 100644
--- a/target/mips/mips-semi.c
+++ b/target/mips/mips-semi.c
@@ -75,6 +75,7 @@ enum UHIOpenFlags {
 
 /* Errno values taken from asm-mips/errno.h */
 static uint16_t host_to_mips_errno[] = {
+#ifndef __HAIKU__
     [ENAMETOOLONG] = 78,
 #ifdef EOVERFLOW
     [EOVERFLOW]    = 79,
@@ -82,6 +83,9 @@ static uint16_t host_to_mips_errno[] = {
 #ifdef ELOOP
     [ELOOP]        = 90,
 #endif
+#else
+NULL
+#endif
 };
 
 static int errno_mips(int err)
diff --git a/target/xtensa/xtensa-semi.c b/target/xtensa/xtensa-semi.c
index 7aa1d13..de7b7f5 100644
--- a/target/xtensa/xtensa-semi.c
+++ b/target/xtensa/xtensa-semi.c
@@ -98,59 +98,53 @@ enum {
 
 static uint32_t errno_h2g(int host_errno)
 {
-    static const uint32_t guest_errno[] = {
-        [EPERM]         = TARGET_EPERM,
-        [ENOENT]        = TARGET_ENOENT,
-        [ESRCH]         = TARGET_ESRCH,
-        [EINTR]         = TARGET_EINTR,
-        [EIO]           = TARGET_EIO,
-        [ENXIO]         = TARGET_ENXIO,
-        [E2BIG]         = TARGET_E2BIG,
-        [ENOEXEC]       = TARGET_ENOEXEC,
-        [EBADF]         = TARGET_EBADF,
-        [ECHILD]        = TARGET_ECHILD,
-        [EAGAIN]        = TARGET_EAGAIN,
-        [ENOMEM]        = TARGET_ENOMEM,
-        [EACCES]        = TARGET_EACCES,
-        [EFAULT]        = TARGET_EFAULT,
+	switch (host_errno) {
+		case 0: return 0;
+		case EPERM: return TARGET_EPERM;
+		case ENOENT: return TARGET_ENOENT;
+		case ESRCH: return TARGET_ESRCH;
+		case EINTR: return TARGET_EINTR;
+		case EIO: return TARGET_EIO;
+		case ENXIO: return TARGET_ENXIO;
+		case E2BIG: return TARGET_E2BIG;
+		case ENOEXEC: return TARGET_ENOEXEC;
+		case EBADF: return TARGET_EBADF;
+		case ECHILD: return TARGET_ECHILD;
+		case EAGAIN: return TARGET_EAGAIN;
+		case ENOMEM: return TARGET_ENOMEM;
+		case EACCES: return TARGET_EACCES;
+		case EFAULT: return TARGET_EFAULT;
 #ifdef ENOTBLK
-        [ENOTBLK]       = TARGET_ENOTBLK,
+		case ENOTBLK: return TARGET_ENOTBLK;
 #endif
-        [EBUSY]         = TARGET_EBUSY,
-        [EEXIST]        = TARGET_EEXIST,
-        [EXDEV]         = TARGET_EXDEV,
-        [ENODEV]        = TARGET_ENODEV,
-        [ENOTDIR]       = TARGET_ENOTDIR,
-        [EISDIR]        = TARGET_EISDIR,
-        [EINVAL]        = TARGET_EINVAL,
-        [ENFILE]        = TARGET_ENFILE,
-        [EMFILE]        = TARGET_EMFILE,
-        [ENOTTY]        = TARGET_ENOTTY,
+		case EBUSY: return TARGET_EBUSY;
+		case EEXIST: return TARGET_EEXIST;
+		case EXDEV: return TARGET_EXDEV;
+		case ENODEV: return TARGET_ENODEV;
+		case ENOTDIR: return TARGET_ENOTDIR;
+		case EISDIR: return TARGET_EISDIR;
+		case EINVAL: return TARGET_EINVAL;
+		case ENFILE: return TARGET_ENFILE;
+		case EMFILE: return TARGET_EMFILE;
+		case ENOTTY: return TARGET_ENOTTY;
 #ifdef ETXTBSY
-        [ETXTBSY]       = TARGET_ETXTBSY,
+		case ETXTBSY: return TARGET_ETXTBSY;
 #endif
-        [EFBIG]         = TARGET_EFBIG,
-        [ENOSPC]        = TARGET_ENOSPC,
-        [ESPIPE]        = TARGET_ESPIPE,
-        [EROFS]         = TARGET_EROFS,
-        [EMLINK]        = TARGET_EMLINK,
-        [EPIPE]         = TARGET_EPIPE,
-        [EDOM]          = TARGET_EDOM,
-        [ERANGE]        = TARGET_ERANGE,
-        [ENOSYS]        = TARGET_ENOSYS,
+		case EFBIG: return TARGET_EFBIG;
+		case ENOSPC: return TARGET_ENOSPC;
+		case ESPIPE: return TARGET_ESPIPE;
+		case EROFS: return TARGET_EROFS;
+		case EMLINK: return TARGET_EMLINK;
+		case EPIPE: return TARGET_EPIPE;
+		case EDOM: return TARGET_EDOM;
+		case ERANGE: return TARGET_ERANGE;
+		case ENOSYS: return TARGET_ENOSYS;
 #ifdef ELOOP
-        [ELOOP]         = TARGET_ELOOP,
+		case ELOOP: return TARGET_ELOOP;
 #endif
     };
 
-    if (host_errno == 0) {
-        return 0;
-    } else if (host_errno > 0 && host_errno < ARRAY_SIZE(guest_errno) &&
-            guest_errno[host_errno]) {
-        return guest_errno[host_errno];
-    } else {
-        return TARGET_EINVAL;
-    }
+    return TARGET_EINVAL;
 }
 
 void xtensa_sim_open_console(Chardev *chr)
diff --git a/tests/Makefile.include b/tests/Makefile.include
index 37c1bed..5879713 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -806,7 +806,7 @@ tests/migration/initrd-stress.img: tests/migration/stress$(EXESUF)
 	rmdir $(INITRD_WORK_DIR)
 
 ifeq ($(CONFIG_POSIX),y)
-LIBS += -lutil
+LIBS += 
 endif
 
 # QTest rules
diff --git a/util/compatfd.c b/util/compatfd.c
index 980bd33..31e01d6 100644
--- a/util/compatfd.c
+++ b/util/compatfd.c
@@ -17,7 +17,9 @@
 #include "qemu-common.h"
 #include "qemu/thread.h"
 
+#ifndef __HAIKU__
 #include <sys/syscall.h>
+#endif
 
 struct sigfd_compat_info
 {
diff --git a/util/main-loop.c b/util/main-loop.c
index 2f48f41..e0350f6 100644
--- a/util/main-loop.c
+++ b/util/main-loop.c
@@ -81,7 +81,9 @@ static int qemu_signal_init(void)
      */
     sigemptyset(&set);
     sigaddset(&set, SIG_IPI);
+#ifdef SIGIO
     sigaddset(&set, SIGIO);
+#endif
     sigaddset(&set, SIGALRM);
     sigaddset(&set, SIGBUS);
     /* SIGINT cannot be handled via signalfd, so that ^C can be used
diff --git a/util/oslib-posix.c b/util/oslib-posix.c
index cacf0ef..813f7f9 100644
--- a/util/oslib-posix.c
+++ b/util/oslib-posix.c
@@ -36,7 +36,9 @@
 #include "qapi/error.h"
 #include "qemu/sockets.h"
 #include <libgen.h>
+#ifndef __HAIKU__
 #include <sys/signal.h>
+#endif
 #include "qemu/cutils.h"
 
 #ifdef CONFIG_LINUX
diff --git a/util/qemu-openpty.c b/util/qemu-openpty.c
index 2e8b43b..adcc732 100644
--- a/util/qemu-openpty.c
+++ b/util/qemu-openpty.c
@@ -35,7 +35,9 @@
 #include "qemu/osdep.h"
 #include "qemu-common.h"
 
-#if defined(__GLIBC__)
+#if defined(__HAIKU__)
+# include <termios.h>
+#elif defined(__GLIBC__)
 # include <pty.h>
 #elif defined CONFIG_BSD
 # include <termios.h>
-- 
2.13.1

