Index: src/trusted/plugin/srpc/nexe_arch.cc |
=================================================================== |
--- src/trusted/plugin/srpc/nexe_arch.cc (revision 2716) |
+++ src/trusted/plugin/srpc/nexe_arch.cc (working copy) |
@@ -1,123 +0,0 @@ |
-/* |
- * Copyright 2010 The Native Client Authors. All rights reserved. |
- * Use of this source code is governed by a BSD-style license that can |
- * be found in the LICENSE file. |
- */ |
- |
-#include "native_client/src/trusted/plugin/srpc/nexe_arch.h" |
- |
-#include <stdio.h> |
- |
-#include "native_client/src/include/portability.h" |
-#include "native_client/src/trusted/platform_qualify/nacl_os_qualify.h" |
-#include "native_client/src/trusted/plugin/srpc/utility.h" |
- |
-namespace plugin { |
- |
-// Returns the kind of SFI sandbox implemented by sel_ldr on this |
-// platform: ARM, x86-32, x86-64. |
-// |
-// This is a function of the current CPU, OS, browser, installed |
-// sel_ldr(s). It is not sufficient to derive the result only from |
-// build-time parameters since, for example, an x86-32 plugin is |
-// capable of launching a 64-bit NaCl sandbox if a 64-bit sel_ldr is |
-// installed (and indeed, may only be capable of launching a 64-bit |
-// sandbox). |
-// |
-// TODO(adonovan): this function changes over time as we deploy |
-// different things. It should be defined once, authoritatively, |
-// instead of guessed at where it's needed, e.g. here. |
-static nacl::string GetSandbox(); |
- |
-#if NACL_ARCH_CPU_X86_FAMILY |
- |
-static nacl::string GetSandbox() { |
-#if !defined(NACL_STANDALONE) && NACL_ARCH_CPU_X86_64 && NACL_LINUX |
- return "x86-64"; // 64-bit Chrome on Linux |
-#else |
- return NaClOsIs64BitWindows() == 1 |
- ? "x86-64" // 64-bit Windows (Chrome, Firefox) |
- : "x86-32"; // everything else. |
-#endif |
-} |
- |
-#elif NACL_ARCH_CPU_ARM_FAMILY |
- |
-static nacl::string GetSandbox() { return "ARM"; } |
- |
-#else /* hopefully unreachable */ |
- |
-#error GetSandbox() missing on this platform |
- |
-#endif |
- |
-// Removes leading and trailing ASCII whitespace from |*s|. |
-static nacl::string TrimWhitespace(const nacl::string& s) { |
- size_t start = s.find_first_not_of(" \t"); |
- size_t end = s.find_last_not_of(" \t"); |
- return start == nacl::string::npos |
- ? "" |
- : s.substr(start, end + 1 - start); |
-} |
- |
-// Parse one line of the nexes attribute. |
-// Returns true iff it's a match, and writes URL to |*url|. |
-static bool ParseOneNexeLine(const nacl::string& nexe_line, |
- const nacl::string& sandbox, |
- nacl::string* url) { |
- size_t semi = nexe_line.find(':'); |
- if (semi == nacl::string::npos) { |
- PLUGIN_PRINTF(("missing colon in line of 'nexes' attribute")); |
- return false; |
- } |
- nacl::string attr_sandbox = TrimWhitespace(nexe_line.substr(0, semi)); |
- nacl::string attr_url = TrimWhitespace(nexe_line.substr(semi + 1)); |
- bool match = sandbox == attr_sandbox; |
- PLUGIN_PRINTF(("ParseOneNexeLine %s %s: match=%d\n", |
- attr_sandbox.c_str(), |
- attr_url.c_str(), |
- match)); |
- if (match) *url = attr_url; |
- return match; |
-} |
- |
-// Parses an <embed nexes='...'> attribute and returns the URL of the |
-// nexe matching |sandbox|. Returns true and assigns |*result| to the |
-// URL on success; otherwise returns false. |
-// |
-// nexes ::= <nexe-line> ( '\n' <nexes> )* |
-// nexe-line ::= <sandbox> ':' <nexe-url> |
-// |
-// Spaces surrounding <sandbox> and <nexe-url> are ignored, but |
-// <nexe-url> may contain internal spaces. |
-static bool FindNexeForSandbox(const nacl::string& nexes_attr, |
- const nacl::string& sandbox, |
- nacl::string* url) { |
- size_t pos, oldpos; |
- for (oldpos = 0, pos = nexes_attr.find('\n', oldpos); |
- pos != nacl::string::npos; |
- oldpos = pos + 1, pos = nexes_attr.find('\n', oldpos)) { |
- if (ParseOneNexeLine(nexes_attr.substr(oldpos, pos - oldpos), sandbox, |
- url)) { |
- return true; |
- } |
- } |
- if (oldpos < nexes_attr.size() - 1) { /* attr doesn't end in newline */ |
- if (ParseOneNexeLine(nexes_attr.substr(oldpos), sandbox, url)) return true; |
- } |
- return false; |
-} |
- |
-// See nexe_arch.h. |
-// An entry point for testing. |
-bool GetNexeURL(const char* nexes_attr, nacl::string* result) { |
- const nacl::string sandbox = GetSandbox(); |
- PLUGIN_PRINTF(("GetNexeURL(): sandbox='%s' nexes='%s'.\n", |
- sandbox.c_str(), nexes_attr)); |
- if (FindNexeForSandbox(nexes_attr, sandbox, result)) return true; |
- *result = "No Native Client executable was provided for the " + sandbox |
- + " sandbox."; |
- return false; |
-} |
- |
-} // namespace plugin |