Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Unified Diff: ppapi/native_client/src/trusted/plugin/plugin.cc

Issue 15697019: Parametrize names of llc and ld nexes by reading them from the resource info JSON file. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Tweak comments some more, following Jan's review Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ppapi/native_client/src/trusted/plugin/plugin.cc
diff --git a/ppapi/native_client/src/trusted/plugin/plugin.cc b/ppapi/native_client/src/trusted/plugin/plugin.cc
index de70eafbcb070720abd474d956eaa709f81e6247..34b487d08a356f952faa2078bcb2a066a40399ac 100644
--- a/ppapi/native_client/src/trusted/plugin/plugin.cc
+++ b/ppapi/native_client/src/trusted/plugin/plugin.cc
@@ -9,11 +9,6 @@
#include "native_client/src/trusted/plugin/plugin.h"
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
#include <sys/stat.h>
#include <sys/types.h>
@@ -32,6 +27,7 @@
#include "native_client/src/shared/platform/nacl_check.h"
#include "native_client/src/trusted/desc/nacl_desc_wrapper.h"
#include "native_client/src/trusted/nonnacl_util/sel_ldr_launcher.h"
+#include "native_client/src/trusted/plugin/file_utils.h"
#include "native_client/src/trusted/plugin/json_manifest.h"
#include "native_client/src/trusted/plugin/nacl_entry_points.h"
#include "native_client/src/trusted/plugin/nacl_subprocess.h"
@@ -1104,75 +1100,44 @@ void Plugin::NaClManifestFileDidOpen(int32_t pp_error) {
}
return;
}
- // Duplicate the file descriptor in order to create a FILE stream with it
- // that can later be closed without closing the original descriptor. The
- // browser will take care of the original descriptor.
+ // SlurpFile closes the file descriptor after reading (or on error).
+ // Duplicate our file descriptor since it will be handled by the browser.
int dup_file_desc = DUP(file_desc);
- struct stat stat_buf;
- if (0 != fstat(dup_file_desc, &stat_buf)) {
- CLOSE(dup_file_desc);
- error_info.SetReport(ERROR_MANIFEST_STAT,
- "could not stat manifest file.");
- ReportLoadError(error_info);
- return;
- }
- size_t bytes_to_read = static_cast<size_t>(stat_buf.st_size);
- if (bytes_to_read > kNaClManifestMaxFileBytes) {
- CLOSE(dup_file_desc);
- error_info.SetReport(ERROR_MANIFEST_TOO_LARGE,
- "manifest file too large.");
- ReportLoadError(error_info);
- return;
- }
- FILE* json_file = fdopen(dup_file_desc, "rb");
- PLUGIN_PRINTF(("Plugin::NaClManifestFileDidOpen "
- "(dup_file_desc=%"NACL_PRId32", json_file=%p)\n",
- dup_file_desc, static_cast<void*>(json_file)));
- if (json_file == NULL) {
- CLOSE(dup_file_desc);
- error_info.SetReport(ERROR_MANIFEST_OPEN,
- "could not open manifest file.");
- ReportLoadError(error_info);
- return;
- }
- nacl::scoped_array<char> json_buffer(new char[bytes_to_read + 1]);
- if (json_buffer == NULL) {
- fclose(json_file);
- error_info.SetReport(ERROR_MANIFEST_MEMORY_ALLOC,
- "could not allocate manifest memory.");
+ nacl::string json_buffer;
+ file_utils::StatusCode status = file_utils::SlurpFile(
+ dup_file_desc, json_buffer, kNaClManifestMaxFileBytes);
+
+ if (status != file_utils::PLUGIN_FILE_SUCCESS) {
+ switch (status) {
+ case file_utils::PLUGIN_FILE_SUCCESS:
+ CHECK(0);
+ break;
+ case file_utils::PLUGIN_FILE_ERROR_MEM_ALLOC:
+ error_info.SetReport(ERROR_MANIFEST_MEMORY_ALLOC,
+ "could not allocate manifest memory.");
+ break;
+ case file_utils::PLUGIN_FILE_ERROR_OPEN:
+ error_info.SetReport(ERROR_MANIFEST_OPEN,
+ "could not open manifest file.");
+ break;
+ case file_utils::PLUGIN_FILE_ERROR_FILE_TOO_LARGE:
+ error_info.SetReport(ERROR_MANIFEST_TOO_LARGE,
+ "manifest file too large.");
+ break;
+ case file_utils::PLUGIN_FILE_ERROR_STAT:
+ error_info.SetReport(ERROR_MANIFEST_STAT,
+ "could not stat manifest file.");
+ break;
+ case file_utils::PLUGIN_FILE_ERROR_READ:
+ error_info.SetReport(ERROR_MANIFEST_READ,
+ "could not read manifest file.");
+ break;
+ }
ReportLoadError(error_info);
return;
}
- // json_buffer could hold a large enough buffer that the system might need
- // multiple reads to fill it, so iterate through reads.
- size_t total_bytes_read = 0;
- while (0 < bytes_to_read) {
- size_t bytes_this_read = fread(&json_buffer[total_bytes_read],
- sizeof(char),
- bytes_to_read,
- json_file);
- if (bytes_this_read < bytes_to_read &&
- (feof(json_file) || ferror(json_file))) {
- PLUGIN_PRINTF(("Plugin::NaClManifestFileDidOpen failed: "
- "total_bytes_read=%"NACL_PRIuS" "
- "bytes_to_read=%"NACL_PRIuS"\n",
- total_bytes_read, bytes_to_read));
- fclose(json_file);
- error_info.SetReport(ERROR_MANIFEST_READ,
- "could not read manifest file.");
- ReportLoadError(error_info);
- return;
- }
- total_bytes_read += bytes_this_read;
- bytes_to_read -= bytes_this_read;
- }
- // Once the bytes are read, the FILE is no longer needed, so close it. This
- // allows for early returns without leaking the |json_file| FILE object.
- fclose(json_file);
- // No need to close |file_desc|, that is handled by |nexe_downloader_|.
- json_buffer[total_bytes_read] = '\0'; // Force null termination.
- ProcessNaClManifest(json_buffer.get());
+ ProcessNaClManifest(json_buffer);
}
void Plugin::ProcessNaClManifest(const nacl::string& manifest_json) {
« no previous file with comments | « ppapi/native_client/src/trusted/plugin/file_utils.cc ('k') | ppapi/native_client/src/trusted/plugin/plugin.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698