summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2009-09-21 18:36:33 +0000
committerrubidium <rubidium@openttd.org>2009-09-21 18:36:33 +0000
commit01ab1c60011eb1b9cef03fac73da4b71410f1460 (patch)
treedb7eec7f2444b6f5381730c56692700a22551f77 /src
parent3dd202ba1c15bb5e1bac3ab21eed7f63435a88bb (diff)
downloadopenttd-01ab1c60011eb1b9cef03fac73da4b71410f1460.tar.xz
(svn r17606) -Add: initial support for Haiku; a dedicated server with zlib and libpng compiles and links (for me). Something's fishy with the network so it doesn't actually work (yet)
Diffstat (limited to 'src')
-rw-r--r--src/dedicated.cpp6
-rw-r--r--src/intro_gui.cpp2
-rw-r--r--src/lang/english.txt1
-rw-r--r--src/network/core/host.cpp9
-rw-r--r--src/network/core/os_abstraction.h6
-rw-r--r--src/stdafx.h33
6 files changed, 34 insertions, 23 deletions
diff --git a/src/dedicated.cpp b/src/dedicated.cpp
index 47d98157d..bdfbf2c54 100644
--- a/src/dedicated.cpp
+++ b/src/dedicated.cpp
@@ -19,9 +19,11 @@
#include <unistd.h>
-#if defined(SUNOS) && !defined(_LP64) && !defined(_I32LPx)
+#if (defined(SUNOS) && !defined(_LP64) && !defined(_I32LPx)) || defined(__HAIKU__)
/* Solaris has, in certain situation, pid_t defined as long, while in other
- * cases it has it defined as int... this handles all cases nicely. */
+ * cases it has it defined as int... this handles all cases nicely.
+ * Haiku has also defined pid_t as a long.
+ */
# define PRINTF_PID_T "%ld"
#else
# define PRINTF_PID_T "%d"
diff --git a/src/intro_gui.cpp b/src/intro_gui.cpp
index 47dbd1f11..c0b32b3f0 100644
--- a/src/intro_gui.cpp
+++ b/src/intro_gui.cpp
@@ -279,6 +279,8 @@ void AskExitGame()
SetDParam(0, STR_OSNAME_OSX);
#elif defined(__BEOS__)
SetDParam(0, STR_OSNAME_BEOS);
+#elif defined(__HAIKU__)
+ SetDParam(0, STR_OSNAME_HAIKU);
#elif defined(__MORPHOS__)
SetDParam(0, STR_OSNAME_MORPHOS);
#elif defined(__AMIGA__)
diff --git a/src/lang/english.txt b/src/lang/english.txt
index 3cd7ed36e..57288994d 100644
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -1344,6 +1344,7 @@ STR_OSNAME_DOS :DOS
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS X
STR_OSNAME_BEOS :BeOS
+STR_OSNAME_HAIKU :Haiku
STR_OSNAME_MORPHOS :MorphOS
STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
diff --git a/src/network/core/host.cpp b/src/network/core/host.cpp
index ee9fcfe8f..d622e2e8c 100644
--- a/src/network/core/host.cpp
+++ b/src/network/core/host.cpp
@@ -30,9 +30,9 @@ static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast) // PS
{
}
-#elif defined(BEOS_NET_SERVER) /* doesn't have neither getifaddrs or net/if.h */
+#elif defined(BEOS_NET_SERVER) || defined(__HAIKU__) /* doesn't have neither getifaddrs or net/if.h */
/* Based on Andrew Bachmann's netstat+.c. Big thanks to him! */
-int _netstat(int fd, char **output, int verbose);
+extern "C" int _netstat(int fd, char **output, int verbose);
int seek_past_header(char **pos, const char *header)
{
@@ -63,9 +63,9 @@ static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast) // BE
char **output = &output_pointer;
if (seek_past_header(output, "IP Interfaces:") == B_OK) {
for (;;) {
- uint32 n, fields, read;
+ uint32 n;
+ int fields, read;
uint8 i1, i2, i3, i4, j1, j2, j3, j4;
- struct in_addr inaddr;
uint32 ip;
uint32 netmask;
@@ -85,7 +85,6 @@ static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast) // BE
((sockaddr_in*)&address)->sin_addr.s_addr = htonl(ip | ~netmask);
NetworkAddress addr(address, sizeof(sockaddr));
if (!broadcast->Contains(addr)) *broadcast->Append() = addr;
- index++;
}
if (read < 0) {
break;
diff --git a/src/network/core/os_abstraction.h b/src/network/core/os_abstraction.h
index d9d046139..d0d7204f9 100644
--- a/src/network/core/os_abstraction.h
+++ b/src/network/core/os_abstraction.h
@@ -155,7 +155,7 @@ static inline void OTTDfreeaddrinfo(struct addrinfo *ai)
# include <arpa/inet.h>
# include <net/if.h>
/* According to glibc/NEWS, <ifaddrs.h> appeared in glibc-2.3. */
-# if !defined(__sgi__) && !defined(SUNOS) && !defined(__MORPHOS__) && !defined(__BEOS__) && !defined(__INNOTEK_LIBC__) \
+# if !defined(__sgi__) && !defined(SUNOS) && !defined(__MORPHOS__) && !defined(__BEOS__) && !defined(__HAIKU__) && !defined(__INNOTEK_LIBC__) \
&& !(defined(__GLIBC__) && (__GLIBC__ <= 2) && (__GLIBC_MINOR__ <= 2)) && !defined(__dietlibc__) && !defined(HPUX)
/* If for any reason ifaddrs.h does not exist on your system, comment out
* the following two lines and an alternative way will be used to fetch
@@ -185,6 +185,10 @@ static inline void OTTDfreeaddrinfo(struct addrinfo *ai)
typedef int socklen_t;
#endif
+#ifdef __HAIKU__
+ #define IPV6_V6ONLY 27
+#endif
+
#if defined(PSP)
# include <sys/socket.h>
# include <netinet/in.h>
diff --git a/src/stdafx.h b/src/stdafx.h
index 2dab7c0ae..4cbad1854 100644
--- a/src/stdafx.h
+++ b/src/stdafx.h
@@ -16,15 +16,15 @@
#include "os/macosx/osx_stdafx.h"
#endif /* __APPLE__ */
-#if defined(__NDS__)
+#if defined(__BEOS__) || defined(__HAIKU__)
+ #include <SupportDefs.h>
+ #include <unistd.h>
+ #define _GNU_SOURCE
+ #define TROUBLED_INTS
+#elif defined(__NDS__)
#include <nds/jtypes.h>
- /* NDS' types for uint32/int32 are based on longs, which causes
- * trouble all over the place in OpenTTD. */
- #define uint32 uint32_ugly_hack
- #define int32 int32_ugly_hack
- typedef unsigned int uint32_ugly_hack;
- typedef signed int int32_ugly_hack;
-#endif /* __NDS__ */
+ #define TROUBLED_INTS
+#endif
/* It seems that we need to include stdint.h before anything else
* We need INT64_MAX, which for most systems comes from stdint.h. However, MSVC
@@ -82,10 +82,6 @@
#include <pspthreadman.h>
#endif
-#if defined(__BEOS__)
- #include <SupportDefs.h>
-#endif
-
#if defined(SUNOS) || defined(HPUX)
#include <alloca.h>
#endif
@@ -282,11 +278,18 @@
typedef unsigned char byte;
/* This is already defined in unix, but not in QNX Neutrino (6.x)*/
-#if (!defined(UNIX) && !defined(__CYGWIN__) && !defined(__BEOS__) && !defined(__MORPHOS__)) || defined(__QNXNTO__)
+#if (!defined(UNIX) && !defined(__CYGWIN__) && !defined(__BEOS__) && !defined(__HAIKU__) && !defined(__MORPHOS__)) || defined(__QNXNTO__)
typedef unsigned int uint;
#endif
-#if !defined(__BEOS__) && !defined(__NDS__) /* Already defined on BEOS and NDS */
+#if defined(TROUBLED_INTS)
+ /* NDS'/BeOS'/Haiku's types for uint32/int32 are based on longs, which causes
+ * trouble all over the place in OpenTTD. */
+ #define uint32 uint32_ugly_hack
+ #define int32 int32_ugly_hack
+ typedef unsigned int uint32_ugly_hack;
+ typedef signed int int32_ugly_hack;
+#else
typedef unsigned char uint8;
typedef signed char int8;
typedef unsigned short uint16;
@@ -295,7 +298,7 @@ typedef unsigned char byte;
typedef signed int int32;
typedef unsigned __int64 uint64;
typedef signed __int64 int64;
-#endif /* !__BEOS__ && !__NDS__ */
+#endif /* !TROUBLED_INTS */
#if !defined(WITH_PERSONAL_DIR)
#define PERSONAL_DIR ""