Index: runtime/bin/utils_macos.cc |
diff --git a/runtime/bin/utils_macos.cc b/runtime/bin/utils_macos.cc |
index 2421d2a6a8e09325c762b37713fe868775050fd5..97717c756e6e26c66ae52c2e7e83bbf5a96b2993 100644 |
--- a/runtime/bin/utils_macos.cc |
+++ b/runtime/bin/utils_macos.cc |
@@ -78,7 +78,26 @@ char* StringUtils::Utf8ToConsoleString( |
char* StringUtils::StrNDup(const char* s, intptr_t n) { |
+ // strndup has only been added to Mac OS X in 10.7. We are supplying |
+ // our own copy here if needed. |
+#if !defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) || \ |
+ __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ <= 1060 |
+ intptr_t len = strlen(s); |
+ if ((n < 0) || (len < 0)) { |
+ return NULL; |
+ } |
+ if (n < len) { |
+ len = n; |
+ } |
+ char* result = reinterpret_cast<char*>(malloc(len + 1)); |
+ if (result == NULL) { |
+ return NULL; |
+ } |
+ result[len] = '\0'; |
+ return reinterpret_cast<char*>(memmove(result, s, len)); |
+#else // !defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) || ... |
return strndup(s, n); |
+#endif // !defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) || ... |
} |