| // Copyright 2015 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chromiumos-wide-profiling/data_reader.h" |
| |
| #include <algorithm> |
| |
| #include "base/logging.h" |
| |
| #include "chromiumos-wide-profiling/binary_data_utils.h" |
| |
| namespace quipper { |
| |
| bool DataReader::ReadDataString(const size_t size, string* dest) { |
| if (size == 0) { |
| dest->clear(); |
| return true; |
| } |
| const size_t orig_size = dest->size(); |
| dest->resize(std::max(size, orig_size)); |
| bool ret = ReadData(size, &(*dest)[0]); |
| dest->resize(ret ? size : orig_size); |
| return ret; |
| } |
| |
| bool DataReader::ReadDataValue(const size_t size, const string& value_name, |
| void* dest) { |
| if (ReadData(size, dest)) |
| return true; |
| LOG(ERROR) << "Unable to read " << value_name << ". Requested " << size |
| << " bytes, " << size_ - Tell() << " bytes remaining."; |
| return false; |
| } |
| |
| bool DataReader::ReadStringWithSizeFromData(string* dest) { |
| uint32_t len = 0; |
| if (!ReadUint32(&len)) { |
| LOG(ERROR) << "Could not read string length from data."; |
| return false; |
| } |
| |
| if (!ReadString(len, dest)) { |
| LOG(ERROR) << "Failed to read string from data. len: " << len; |
| return false; |
| } |
| return true; |
| } |
| |
| } // namespace quipper |