From 4bb40a7d4431b32016353d197c9fa8f59fe119a9 Mon Sep 17 00:00:00 2001 From: glx Date: Sun, 24 Aug 2008 17:02:21 +0000 Subject: (svn r14154) -Fix (r14153): strndup is a GNU extension, so it doesn't exist on all platforms --- src/stdafx.h | 5 +++++ src/string.cpp | 11 +++++++++++ src/string_func.h | 7 ++++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/stdafx.h b/src/stdafx.h index f6ef278c4..5ca14d082 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -145,6 +145,11 @@ #include // 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 diff --git a/src/string.cpp b/src/string.cpp index 041fa8e45..9173dc4a5 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -304,3 +304,14 @@ size_t Utf8TrimString(char *s, size_t maxlen) *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(len + 1); + memcpy(tmp, s, len); + return tmp; +} +#endif /* !_GNU_SOURCE */ diff --git a/src/string_func.h b/src/string_func.h index 82530ae65..7bc2d6c95 100644 --- a/src/string_func.h +++ b/src/string_func.h @@ -156,4 +156,9 @@ static inline bool IsWhitespace(WChar c) ; } -#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 */ -- cgit v1.2.3-54-g00ecf