| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2011 The Chromium Authors. All rights reserved. | 2 * Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 3 * Use of this source code is governed by a BSD-style license that can be | 3 * Use of this source code is governed by a BSD-style license that can be |
| 4 * found in the LICENSE file. | 4 * found in the LICENSE file. |
| 5 */ | 5 */ |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "native_client/src/trusted/plugin/manifest.h" | 9 #include "native_client/src/trusted/plugin/manifest.h" |
| 10 | 10 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 // "foo.txt": { | 53 // "foo.txt": { |
| 54 // "portable": {"url": "foo.txt"} | 54 // "portable": {"url": "foo.txt"} |
| 55 // }, | 55 // }, |
| 56 // "bar.txt": { | 56 // "bar.txt": { |
| 57 // "x86-32": {"url": "x86-32/bar.txt"}, | 57 // "x86-32": {"url": "x86-32/bar.txt"}, |
| 58 // "portable": {"url": "bar.txt"} | 58 // "portable": {"url": "bar.txt"} |
| 59 // } | 59 // } |
| 60 // } | 60 // } |
| 61 // } | 61 // } |
| 62 | 62 |
| 63 // TODO(jvoung): Remove these when we find a better way to store/install them. | |
| 64 const char* const kPnaclLlcKey = "pnacl-llc"; | |
| 65 const char* const kPnaclLdKey = "pnacl-ld"; | |
| 66 | |
| 67 // Looks up |property_name| in the vector |valid_names| with length | 63 // Looks up |property_name| in the vector |valid_names| with length |
| 68 // |valid_name_count|. Returns true if |property_name| is found. | 64 // |valid_name_count|. Returns true if |property_name| is found. |
| 69 bool FindMatchingProperty(nacl::string property_name, | 65 bool FindMatchingProperty(nacl::string property_name, |
| 70 const char** valid_names, | 66 const char** valid_names, |
| 71 size_t valid_name_count) { | 67 size_t valid_name_count) { |
| 72 for (size_t i = 0; i < valid_name_count; ++i) { | 68 for (size_t i = 0; i < valid_name_count; ++i) { |
| 73 if (property_name == valid_names[i]) { | 69 if (property_name == valid_names[i]) { |
| 74 return true; | 70 return true; |
| 75 } | 71 } |
| 76 } | 72 } |
| (...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 427 error_info->SetReport( | 423 error_info->SetReport( |
| 428 ERROR_MANIFEST_RESOLVE_URL, | 424 ERROR_MANIFEST_RESOLVE_URL, |
| 429 nacl::string("ResolveKey: no such \"files\" entry: ") + key); | 425 nacl::string("ResolveKey: no such \"files\" entry: ") + key); |
| 430 *is_portable = false; | 426 *is_portable = false; |
| 431 return false; | 427 return false; |
| 432 } | 428 } |
| 433 return GetKeyUrl(files, rest, sandbox_isa_, | 429 return GetKeyUrl(files, rest, sandbox_isa_, |
| 434 full_url, error_info, is_portable, this); | 430 full_url, error_info, is_portable, this); |
| 435 } | 431 } |
| 436 | 432 |
| 437 // TODO(jvoung): We won't need these if we figure out how to install llc and ld. | |
| 438 bool Manifest::GetLLCURL(nacl::string* full_url, ErrorInfo* error_info) { | |
| 439 if (full_url == NULL || error_info == NULL) | |
| 440 return false; | |
| 441 | |
| 442 Json::Value pnacl_llc = dictionary_[kPnaclLlcKey]; | |
| 443 | |
| 444 nacl::string nexe_url; | |
| 445 nacl::string error_string; | |
| 446 bool is_portable; | |
| 447 if (!GetURLFromISADictionary(pnacl_llc, | |
| 448 sandbox_isa_, | |
| 449 &nexe_url, | |
| 450 &error_string, | |
| 451 &is_portable)) { | |
| 452 error_info->SetReport(ERROR_MANIFEST_GET_NEXE_URL, | |
| 453 nacl::string(kPnaclLlcKey) + ":" + sandbox_isa_ + | |
| 454 error_string); | |
| 455 return false; | |
| 456 } | |
| 457 | |
| 458 if (is_portable) { | |
| 459 // Bootstrap problem -- we need this to translate portable programs! | |
| 460 error_info->SetReport(ERROR_MANIFEST_GET_NEXE_URL, | |
| 461 nacl::string(kPnaclLlcKey) + | |
| 462 " must be pre-translated for " + sandbox_isa_ + "!"); | |
| 463 return false; | |
| 464 } | |
| 465 | |
| 466 return ResolveURL(nexe_url, full_url, error_info); | |
| 467 } | |
| 468 | |
| 469 bool Manifest::GetLDURL(nacl::string* full_url, ErrorInfo* error_info) { | |
| 470 if (full_url == NULL || error_info == NULL) | |
| 471 return false; | |
| 472 | |
| 473 Json::Value pnacl_ld = dictionary_[kPnaclLdKey]; | |
| 474 | |
| 475 nacl::string nexe_url; | |
| 476 nacl::string error_string; | |
| 477 bool is_portable; | |
| 478 if (!GetURLFromISADictionary(pnacl_ld, | |
| 479 sandbox_isa_, | |
| 480 &nexe_url, | |
| 481 &error_string, | |
| 482 &is_portable)) { | |
| 483 error_info->SetReport(ERROR_MANIFEST_GET_NEXE_URL, | |
| 484 nacl::string(kPnaclLdKey) + ":" + sandbox_isa_ + | |
| 485 error_string); | |
| 486 return false; | |
| 487 } | |
| 488 | |
| 489 if (is_portable) { | |
| 490 // Bootstrap problem -- we need this to translate portable programs! | |
| 491 error_info->SetReport(ERROR_MANIFEST_GET_NEXE_URL, | |
| 492 nacl::string(kPnaclLdKey) + | |
| 493 " must be pre-translated for " + sandbox_isa_ + "!"); | |
| 494 return false; | |
| 495 } | |
| 496 | |
| 497 return ResolveURL(nexe_url, full_url, error_info); | |
| 498 } | |
| 499 | |
| 500 } // namespace plugin | 433 } // namespace plugin |
| OLD | NEW |