changeset 9997:71ed8bf0a031 draft

(svn r14154) -Fix (r14153): strndup is a GNU extension, so it doesn't exist on all platforms
author glx <glx@openttd.org>
date Sun, 24 Aug 2008 17:02:21 +0000
parents 091e875c5ade
children 5059d43e28d8
files src/stdafx.h src/string.cpp src/string_func.h
diffstat 3 files changed, 22 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/stdafx.h
+++ b/src/stdafx.h
@@ -145,6 +145,11 @@
 	#include <malloc.h> // alloca()
 #endif
 
+#if defined(__MINGW32__) && defined(_GNU_SOURCE)
+	/* For some weird reasons, SDL defines _GNU_SOURCE */
+	#undef _GNU_SOURCE
+#endif
+
 #if defined(WIN32)
 	#define WIN32_LEAN_AND_MEAN     // Exclude rarely-used stuff from Windows headers
 #endif
--- a/src/string.cpp
+++ b/src/string.cpp
@@ -304,3 +304,14 @@
 	*s = '\0';
 	return length;
 }
+
+#ifndef _GNU_SOURCE
+#include "core/math_func.hpp"
+char *strndup(const char *s, size_t len)
+{
+	len = min(strlen(s), len);
+	char *tmp = CallocT<char>(len + 1);
+	memcpy(tmp, s, len);
+	return tmp;
+}
+#endif /* !_GNU_SOURCE */
--- a/src/string_func.h
+++ b/src/string_func.h
@@ -156,4 +156,9 @@
 	;
 }
 
-#endif /* STRING_FUNC_H */
+#ifndef _GNU_SOURCE
+/* strndup is a GNU extension */
+char *strndup(const char *s, size_t len);
+#endif /* WIN32 || SUNOS */
+
+#endif /* !_GNU_SOURCE */