| // 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/file_reader.h" |
| |
| #include <string.h> |
| |
| #include <memory> |
| |
| namespace quipper { |
| |
| FileReader::FileReader(const string& filename) { |
| infile_ = fopen(filename.c_str(), "rb"); |
| if (!IsOpen()) { |
| size_ = 0; |
| return; |
| } |
| // Determine the size of the file. |
| fseek(infile_, 0, SEEK_END); |
| size_ = ftell(infile_); |
| |
| // Reset to the beginning of the file. |
| fseek(infile_, 0, SEEK_SET); |
| } |
| |
| FileReader::~FileReader() { |
| if (IsOpen()) { |
| fclose(infile_); |
| } |
| } |
| |
| bool FileReader::ReadData(const size_t size, void* dest) { |
| if (Tell() + size > size_ || fread(dest, 1, size, infile_) < size) |
| return false; |
| return true; |
| } |
| |
| bool FileReader::ReadString(const size_t size, string* str) { |
| if (!ReadDataString(size, str)) |
| return false; |
| |
| // Truncate anything after a terminating null. |
| size_t actual_length = strnlen(str->data(), size); |
| str->resize(actual_length); |
| return true; |
| } |
| |
| } // namespace quipper |