Index: runtime/bin/process_macos.cc |
diff --git a/runtime/bin/process_macos.cc b/runtime/bin/process_macos.cc |
index de7f149cb8f33b9cbaabb196bca4a7f81974912c..6d628086f4a820596764cd4693bfa8e3d5702e49 100644 |
--- a/runtime/bin/process_macos.cc |
+++ b/runtime/bin/process_macos.cc |
@@ -452,7 +452,10 @@ class ProcessStarter { |
} |
if (program_environment_ != NULL) { |
- environ = program_environment_; |
+ // On MacOS you have to do a bit of magic to get to the |
+ // environment strings. |
+ char*** environ = _NSGetEnviron(); |
+ *environ = program_environment_; |
} |
VOID_TEMP_FAILURE_RETRY( |
@@ -653,10 +656,7 @@ class ProcessStarter { |
void SetChildOsErrorMessage() { |
- const int kBufferSize = 1024; |
- char error_message[kBufferSize]; |
- strerror_r(errno, error_message, kBufferSize); |
- *os_error_message_ = strdup(error_message); |
+ SetOSErrorMessage(errno); |
} |
@@ -681,10 +681,10 @@ class ProcessStarter { |
void SetOSErrorMessage(int child_errno) { |
- const int kMaxMessageSize = 256; |
- char* message = static_cast<char*>(calloc(kMaxMessageSize, 0)); |
- strerror_r(child_errno, message, kMaxMessageSize - 1); |
- *os_error_message_ = message; |
+ const int kBufferSize = 1024; |
+ char error_message[kBufferSize]; |
+ strerror_r(child_errno, error_message, kBufferSize); |
+ *os_error_message_ = strdup(error_message); |
} |