OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "data_file_renderer_cld_data_provider.h" | 5 #include "data_file_renderer_cld_data_provider.h" |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/files/file.h" | 8 #include "base/files/file.h" |
9 #include "base/files/memory_mapped_file.h" | 9 #include "base/files/memory_mapped_file.h" |
10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 if (IsCldDataAvailable()) | 92 if (IsCldDataAvailable()) |
93 return; | 93 return; |
94 | 94 |
95 if (!file.IsValid()) { | 95 if (!file.IsValid()) { |
96 LOG(ERROR) << "Can't find the CLD data file."; | 96 LOG(ERROR) << "Can't find the CLD data file."; |
97 return; | 97 return; |
98 } | 98 } |
99 | 99 |
100 // mmap the file | 100 // mmap the file |
101 g_cld_mmap.Get().value = new base::MemoryMappedFile(); | 101 g_cld_mmap.Get().value = new base::MemoryMappedFile(); |
102 bool initialized = g_cld_mmap.Get().value->Initialize(file.Pass()); | 102 bool initialized = g_cld_mmap.Get().value->Initialize(file.Pass(), false); |
103 if (!initialized) { | 103 if (!initialized) { |
104 LOG(ERROR) << "mmap initialization failed"; | 104 LOG(ERROR) << "mmap initialization failed"; |
105 delete g_cld_mmap.Get().value; | 105 delete g_cld_mmap.Get().value; |
106 g_cld_mmap.Get().value = NULL; | 106 g_cld_mmap.Get().value = NULL; |
107 return; | 107 return; |
108 } | 108 } |
109 | 109 |
110 // Sanity checks | 110 // Sanity checks |
111 uint64 max_int32 = std::numeric_limits<int32>::max(); | 111 uint64 max_int32 = std::numeric_limits<int32>::max(); |
112 if (data_length + data_offset > g_cld_mmap.Get().value->length() || | 112 if (data_length + data_offset > g_cld_mmap.Get().value->length() || |
113 data_length > max_int32) { // max signed 32 bit integer | 113 data_length > max_int32) { // max signed 32 bit integer |
114 LOG(ERROR) << "Illegal mmap config: data_offset=" << data_offset | 114 LOG(ERROR) << "Illegal mmap config: data_offset=" << data_offset |
115 << ", data_length=" << data_length | 115 << ", data_length=" << data_length |
116 << ", mmap->length()=" << g_cld_mmap.Get().value->length(); | 116 << ", mmap->length()=" << g_cld_mmap.Get().value->length(); |
117 delete g_cld_mmap.Get().value; | 117 delete g_cld_mmap.Get().value; |
118 g_cld_mmap.Get().value = NULL; | 118 g_cld_mmap.Get().value = NULL; |
119 return; | 119 return; |
120 } | 120 } |
121 | 121 |
122 // Initialize the CLD subsystem... and it's all done! | 122 // Initialize the CLD subsystem... and it's all done! |
123 const uint8* data_ptr = g_cld_mmap.Get().value->data() + data_offset; | 123 const uint8* data_ptr = g_cld_mmap.Get().value->data() + data_offset; |
124 CLD2::loadDataFromRawAddress(data_ptr, data_length); | 124 CLD2::loadDataFromRawAddress(data_ptr, data_length); |
125 DCHECK(CLD2::isDataLoaded()) << "Failed to load CLD data from mmap"; | 125 DCHECK(CLD2::isDataLoaded()) << "Failed to load CLD data from mmap"; |
126 if (!cld_available_callback_.is_null()) { | 126 if (!cld_available_callback_.is_null()) { |
127 cld_available_callback_.Run(); | 127 cld_available_callback_.Run(); |
128 } | 128 } |
129 } | 129 } |
130 | 130 |
131 } // namespace translate | 131 } // namespace translate |
OLD | NEW |