diff options
author | erg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-11 22:09:55 +0000 |
---|---|---|
committer | erg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-11 22:09:55 +0000 |
commit | 75cbb35fa7fb6ce0a511612ec91998c053247be8 (patch) | |
tree | 5abee27b2c5f2c60e5017aa6c00b43d9fe2376f4 /base/data_pack.cc | |
parent | 9fa8c2f5e9581c2e521fd28aadedc4c77b9b2150 (diff) | |
download | chromium_src-75cbb35fa7fb6ce0a511612ec91998c053247be8.zip chromium_src-75cbb35fa7fb6ce0a511612ec91998c053247be8.tar.gz chromium_src-75cbb35fa7fb6ce0a511612ec91998c053247be8.tar.bz2 |
Revert "Completely redo how themes are stored on disk and processed at install
time," as it fails valgrind tests.
This reverts commit 86faccd1028937a69ccc718718fd48c06c0cd471 (r34379).
Review URL: http://codereview.chromium.org/490025
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@34385 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/data_pack.cc')
-rw-r--r-- | base/data_pack.cc | 97 |
1 files changed, 13 insertions, 84 deletions
diff --git a/base/data_pack.cc b/base/data_pack.cc index 1078d0a..27054d3 100644 --- a/base/data_pack.cc +++ b/base/data_pack.cc @@ -14,22 +14,17 @@ // http://dev.chromium.org/developers/design-documents/linuxresourcesandlocalizedstrings namespace { - -// A word is four bytes. -static const size_t kWord = 4; - -static const uint32 kFileFormatVersion = 1; +static const uint32_t kFileFormatVersion = 1; // Length of file header: version and entry count. -static const size_t kHeaderLength = 2 * sizeof(uint32); +static const size_t kHeaderLength = 2 * sizeof(uint32_t); -#pragma pack(push,1) struct DataPackEntry { - uint32 resource_id; - uint32 file_offset; - uint32 length; + uint32_t resource_id; + uint32_t file_offset; + uint32_t length; static int CompareById(const void* void_key, const void* void_entry) { - uint32 key = *reinterpret_cast<const uint32*>(void_key); + uint32_t key = *reinterpret_cast<const uint32_t*>(void_key); const DataPackEntry* entry = reinterpret_cast<const DataPackEntry*>(void_entry); if (key < entry->resource_id) { @@ -40,10 +35,7 @@ struct DataPackEntry { return 0; } } -}; -#pragma pack(pop) - -COMPILE_ASSERT(sizeof(DataPackEntry) == 12, size_of_header_must_be_twelve); +} __attribute((packed)); } // anonymous namespace @@ -58,13 +50,12 @@ DataPack::~DataPack() { bool DataPack::Load(const FilePath& path) { mmap_.reset(new file_util::MemoryMappedFile); if (!mmap_->Initialize(path)) { - DLOG(ERROR) << "Failed to mmap datapack"; - return false; + PCHECK(false) << "Failed to mmap " << path.value(); } // Parse the header of the file. - // First uint32: version; second: resource count. - const uint32* ptr = reinterpret_cast<const uint32*>(mmap_->data()); + // First uint32_t: version; second: resource count. + const uint32* ptr = reinterpret_cast<const uint32_t*>(mmap_->data()); uint32 version = ptr[0]; if (version != kFileFormatVersion) { LOG(ERROR) << "Bad data pack version: got " << version << ", expected " @@ -98,7 +89,7 @@ bool DataPack::Load(const FilePath& path) { return true; } -bool DataPack::GetStringPiece(uint32 resource_id, StringPiece* data) { +bool DataPack::GetStringPiece(uint32_t resource_id, StringPiece* data) { // It won't be hard to make this endian-agnostic, but it's not worth // bothering to do right now. #if defined(__BYTE_ORDER) @@ -114,6 +105,7 @@ bool DataPack::GetStringPiece(uint32 resource_id, StringPiece* data) { bsearch(&resource_id, mmap_->data() + kHeaderLength, resource_count_, sizeof(DataPackEntry), DataPackEntry::CompareById)); if (!target) { + LOG(ERROR) << "No resource found with id: " << resource_id; return false; } @@ -121,7 +113,7 @@ bool DataPack::GetStringPiece(uint32 resource_id, StringPiece* data) { return true; } -RefCountedStaticMemory* DataPack::GetStaticMemory(uint32 resource_id) { +RefCountedStaticMemory* DataPack::GetStaticMemory(uint32_t resource_id) { base::StringPiece piece; if (!GetStringPiece(resource_id, &piece)) return NULL; @@ -130,67 +122,4 @@ RefCountedStaticMemory* DataPack::GetStaticMemory(uint32 resource_id) { reinterpret_cast<const unsigned char*>(piece.data()), piece.length()); } -// static -bool DataPack::WritePack(const FilePath& path, - const std::map<uint32, StringPiece>& resources) { - FILE* file = file_util::OpenFile(path, "wb"); - if (!file) - return false; - - if (fwrite(&kFileFormatVersion, 1, kWord, file) != kWord) { - LOG(ERROR) << "Failed to write file version"; - file_util::CloseFile(file); - return false; - } - - // Note: the python version of this function explicitly sorted keys, but - // std::map is a sorted associative container, we shouldn't have to do that. - uint32 entry_count = resources.size(); - if (fwrite(&entry_count, 1, kWord, file) != kWord) { - LOG(ERROR) << "Failed to write entry count"; - file_util::CloseFile(file); - return false; - } - - // Each entry is 3 uint32s. - uint32 index_length = entry_count * 3 * kWord; - uint32 data_offset = kHeaderLength + index_length; - for (std::map<uint32, StringPiece>::const_iterator it = resources.begin(); - it != resources.end(); ++it) { - if (fwrite(&it->first, 1, kWord, file) != kWord) { - LOG(ERROR) << "Failed to write id for " << it->first; - file_util::CloseFile(file); - return false; - } - - if (fwrite(&data_offset, 1, kWord, file) != kWord) { - LOG(ERROR) << "Failed to write offset for " << it->first; - file_util::CloseFile(file); - return false; - } - - uint32 len = it->second.length(); - if (fwrite(&len, 1, kWord, file) != kWord) { - LOG(ERROR) << "Failed to write length for " << it->first; - file_util::CloseFile(file); - return false; - } - - data_offset += len; - } - - for (std::map<uint32, StringPiece>::const_iterator it = resources.begin(); - it != resources.end(); ++it) { - if (fwrite(it->second.data(), it->second.length(), 1, file) != 1) { - LOG(ERROR) << "Failed to write data for " << it->first; - file_util::CloseFile(file); - return false; - } - } - - file_util::CloseFile(file); - - return true; -} - } // namespace base |