blob: 7ab662a0b6e242cca842c73a04418ffea5f1db06 [file] [log] [blame]
// 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