| Index: components/nacl/browser/nacl_process_host.cc
|
| diff --git a/components/nacl/browser/nacl_process_host.cc b/components/nacl/browser/nacl_process_host.cc
|
| index a5a1341dcfb16c65a3bcc8baf41eccd24c8c6b65..0480a65760d0089d52a0d78f1d9e2f3c4e290c38 100644
|
| --- a/components/nacl/browser/nacl_process_host.cc
|
| +++ b/components/nacl/browser/nacl_process_host.cc
|
| @@ -96,6 +96,22 @@ void FindAddressSpace(base::ProcessHandle process,
|
| }
|
| }
|
|
|
| +#ifdef _DLL
|
| +
|
| +bool IsInPath(const std::string& path_env_var, const std::string& dir) {
|
| + std::vector<std::string> split;
|
| + base::SplitString(path_env_var, ';', &split);
|
| + for (std::vector<std::string>::const_iterator i(split.begin());
|
| + i != split.end();
|
| + ++i) {
|
| + if (*i == dir)
|
| + return true;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| +#endif // _DLL
|
| +
|
| } // namespace
|
|
|
| namespace nacl {
|
| @@ -512,6 +528,33 @@ bool NaClProcessHost::LaunchSelLdr() {
|
| SendErrorToRenderer("could not get path to nacl64.exe");
|
| return false;
|
| }
|
| +
|
| +#ifdef _DLL
|
| + // When using the DLL CRT on Windows, we need to amend the PATH to include
|
| + // the location of the x64 CRT DLLs. This is only the case when using a
|
| + // component=shared_library build (i.e. generally dev debug builds). The
|
| + // x86 CRT DLLs are in e.g. out\Debug for chrome.exe etc., so the x64 ones
|
| + // are put in out\Debug\x64 which we add to the PATH here so that loader
|
| + // can find them. See http://crbug.com/346034.
|
| + scoped_ptr<base::Environment> env(base::Environment::Create());
|
| + static const char kPath[] = "PATH";
|
| + std::string old_path;
|
| + base::FilePath module_path;
|
| + if (!PathService::Get(base::FILE_MODULE, &module_path)) {
|
| + SendErrorToRenderer("could not get path to current module");
|
| + return false;
|
| + }
|
| + std::string x64_crt_path =
|
| + base::WideToUTF8(module_path.DirName().Append(L"x64").value());
|
| + if (!env->GetVar(kPath, &old_path)) {
|
| + env->SetVar(kPath, x64_crt_path);
|
| + } else if (!IsInPath(old_path, x64_crt_path)) {
|
| + std::string new_path(old_path);
|
| + new_path.append(";");
|
| + new_path.append(x64_crt_path);
|
| + env->SetVar(kPath, new_path);
|
| + }
|
| +#endif // _DLL
|
| }
|
| #endif
|
|
|
|
|