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

Unified Diff: src/utils.cc

Issue 6240002: Introducing MemoryMappedExternalResource for creating an external... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 9 years, 11 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: src/utils.cc
===================================================================
--- src/utils.cc (revision 6302)
+++ src/utils.cc (working copy)
@@ -276,4 +276,94 @@
}
+MemoryMappedExternalResource::MemoryMappedExternalResource(const char* filename)
+ : filename_(NULL), data_(NULL), length_(0),
mnaganov (inactive) 2011/01/16 10:16:02 Please either have a single line of initialization
marklam 2011/01/18 02:49:02 Done.
+ remove_file_on_cleanup_(false) {
+
mnaganov (inactive) 2011/01/16 10:16:02 Please remove this redundant empty line.
marklam 2011/01/18 02:49:02 Done.
+ Init(filename);
+}
+
+
+MemoryMappedExternalResource::
+ MemoryMappedExternalResource(const char* filename,
+ bool remove_file_on_cleanup)
+ : filename_(NULL), data_(NULL), length_(0),
+ remove_file_on_cleanup_(remove_file_on_cleanup) {
+
+ Init(filename);
+}
+
+
+MemoryMappedExternalResource::~MemoryMappedExternalResource() {
+ // Release the resources if we had successfully acquired them:
+ if (file_) {
+ delete file_;
+
mnaganov (inactive) 2011/01/16 10:16:02 I this empty line and the one below a redundant.
marklam 2011/01/18 02:49:02 Done.
+ if (remove_file_on_cleanup_) {
+ OS::Remove(filename_);
+ }
+
+ DeleteArray<char>(filename_);
+ }
+}
+
+
+void MemoryMappedExternalResource::Init(const char* filename) {
+ file_ = OS::MemoryMappedFile::open(filename);
+ if (file_) {
+ filename_ = StrDup(filename);
+ data_ = reinterpret_cast<char*>(file_->memory());
+ length_ = file_->size();
+ }
+}
+
+
+bool MemoryMappedExternalResource::EnsureIsAscii(bool abort_if_failed) const {
+ bool is_ascii = true;
+
+ int line_no = 1;
+ const char* start_of_line = data_;
+ const char* end = data_ + length_;
+ for (const char* p = data_; p < end; p++) {
+ char c = *p;
+ if (c & 0x80) {
+ // Non-ascii detected:
+ is_ascii = false;
+
+ // Report the error and abort if appropriate:
+ if (abort_if_failed) {
+ int char_no = (p - start_of_line) - 1;
+
+ ASSERT(filename_ != NULL);
+ PrintF("\n\n\n"
+ "Abort: Non-Ascii character 0x%.2x in file %s line %d char %d",
+ c, filename_, line_no, char_no);
+
+ const char* err_context = p - 10;
mnaganov (inactive) 2011/01/16 10:16:02 Please introduce a constant for this magic number.
marklam 2011/01/18 02:49:02 Done.
+ if (err_context < data_) {
+ err_context = data_;
+ }
+ int err_context_length = p - err_context;
+ if (err_context_length) {
+ char buffer[11];
+ strncpy(buffer, err_context, err_context_length);
+ buffer[err_context_length] = '\0';
+ PrintF(" after \"%s\"", buffer);
mnaganov (inactive) 2011/01/16 10:16:02 You can use the "precision" field to specify the m
marklam 2011/01/18 02:49:02 Done.
+ }
+ PrintF(".\n\n\n");
+ abort();
+ }
+
+ break; // Non-ascii detected. No need to continue scanning.
+ }
+ if (c == '\n') {
+ start_of_line = p;
+ line_no++;
+ }
+ }
+
+ return is_ascii;
+}
+
+
} } // namespace v8::internal

Powered by Google App Engine
This is Rietveld 408576698