diff options
author | Oleksiy Vyalov <ovyalov@google.com> | 2015-02-25 22:15:44 +0000 |
---|---|---|
committer | Oleksiy Vyalov <ovyalov@google.com> | 2015-02-25 22:15:44 +0000 |
commit | 6801be33545e2d6721a44da19b0127a3c3d5b1d5 (patch) | |
tree | 870beb48ea96d41ad8fbe2f2d5c1eb057bd6e8d7 /lldb/source/Host/common/FileSystem.cpp | |
parent | 89c1eaa5317ad5abea69e973d2485ca1ab790975 (diff) | |
download | bcm5719-llvm-6801be33545e2d6721a44da19b0127a3c3d5b1d5.tar.gz bcm5719-llvm-6801be33545e2d6721a44da19b0127a3c3d5b1d5.zip |
Add qModuleInfo request in order to get module information (uuid, triple,..) by module path from remote platform.
http://reviews.llvm.org/D7709
llvm-svn: 230556
Diffstat (limited to 'lldb/source/Host/common/FileSystem.cpp')
-rw-r--r-- | lldb/source/Host/common/FileSystem.cpp | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/lldb/source/Host/common/FileSystem.cpp b/lldb/source/Host/common/FileSystem.cpp index 509a187e40e..5a5dbc79fe1 100644 --- a/lldb/source/Host/common/FileSystem.cpp +++ b/lldb/source/Host/common/FileSystem.cpp @@ -11,6 +11,7 @@ #include "llvm/Support/MD5.h" +#include <algorithm> #include <fstream> #include <vector> @@ -20,22 +21,33 @@ using namespace lldb_private; namespace { bool -CalcMD5(const FileSpec &file_spec, llvm::MD5::MD5Result &md5_result) +CalcMD5(const FileSpec &file_spec, uint64_t offset, uint64_t length, llvm::MD5::MD5Result &md5_result) { llvm::MD5 md5_hash; std::ifstream file(file_spec.GetPath(), std::ios::binary); if (!file.is_open()) return false; + if (offset > 0) + file.seekg(offset, file.beg); + std::vector<char> read_buf(4096); + uint64_t total_read_bytes = 0; while (!file.eof()) { - file.read(&read_buf[0], read_buf.size()); + const uint64_t to_read = (length > 0) ? + std::min(static_cast<uint64_t>(read_buf.size()), length - total_read_bytes) : + read_buf.size(); + if (to_read == 0) + break; + + file.read(&read_buf[0], to_read); const auto read_bytes = file.gcount(); if (read_bytes == 0) break; md5_hash.update(llvm::StringRef(&read_buf[0], read_bytes)); + total_read_bytes += read_bytes; } md5_hash.final(md5_result); @@ -47,8 +59,18 @@ CalcMD5(const FileSpec &file_spec, llvm::MD5::MD5Result &md5_result) bool FileSystem::CalculateMD5(const FileSpec &file_spec, uint64_t &low, uint64_t &high) { + return CalculateMD5(file_spec, 0, 0, low, high); +} + +bool +FileSystem::CalculateMD5(const FileSpec &file_spec, + uint64_t offset, + uint64_t length, + uint64_t &low, + uint64_t &high) +{ llvm::MD5::MD5Result md5_result; - if (!CalcMD5(file_spec, md5_result)) + if (!CalcMD5(file_spec, offset, length, md5_result)) return false; const auto uint64_res = reinterpret_cast<const uint64_t*>(md5_result); @@ -61,8 +83,17 @@ FileSystem::CalculateMD5(const FileSpec &file_spec, uint64_t &low, uint64_t &hig bool FileSystem::CalculateMD5AsString(const FileSpec &file_spec, std::string& digest_str) { + return CalculateMD5AsString(file_spec, 0, 0, digest_str); +} + +bool +FileSystem::CalculateMD5AsString(const FileSpec &file_spec, + uint64_t offset, + uint64_t length, + std::string& digest_str) +{ llvm::MD5::MD5Result md5_result; - if (!CalcMD5(file_spec, md5_result)) + if (!CalcMD5(file_spec, offset, length, md5_result)) return false; llvm::SmallString<32> result_str; |