blob: 9cf2a9d998c202cdd6772e9b356fde3daf960cd1 [file] [log] [blame]
// Copyright 2020 The Fuchsia 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 "src/developer/forensics/crash_reports/sized_data_reader.h"
#include <lib/syslog/cpp/macros.h>
namespace forensics {
namespace crash_reports {
crashpad::FileOperationResult SizedDataReader::Read(void* data, const size_t size) {
if (offset_ >= data_.size()) {
return 0;
}
// Can't read beyond the end of the buffer.
const auto read_size = std::min(size, data_.size() - offset_);
memcpy(data, &data_[offset_], read_size);
offset_ += read_size;
return read_size;
}
crashpad::FileOffset SizedDataReader::Seek(const crashpad::FileOffset offset, const int whence) {
size_t base_offset{0u};
switch (whence) {
case SEEK_SET:
base_offset = 0;
break;
case SEEK_CUR:
base_offset = offset_;
break;
case SEEK_END:
base_offset = data_.size();
break;
default:
FX_LOGS(ERROR) << "Invalid whence " << whence;
return -1;
}
offset_ = base_offset + offset;
return offset_;
}
} // namespace crash_reports
} // namespace forensics