1 // Copyright 2015 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "file_reader.h"
6
7 #include <string.h>
8
9 #include <memory>
10
11 namespace quipper {
12
FileReader(const string & filename)13 FileReader::FileReader(const string& filename) {
14 infile_ = fopen(filename.c_str(), "rb");
15 if (!IsOpen()) {
16 size_ = 0;
17 return;
18 }
19 // Determine the size of the file.
20 fseek(infile_, 0, SEEK_END);
21 size_ = ftell(infile_);
22
23 // Reset to the beginning of the file.
24 fseek(infile_, 0, SEEK_SET);
25 }
26
~FileReader()27 FileReader::~FileReader() {
28 if (IsOpen()) {
29 fclose(infile_);
30 }
31 }
32
ReadData(const size_t size,void * dest)33 bool FileReader::ReadData(const size_t size, void* dest) {
34 if (Tell() + size > size_ || fread(dest, 1, size, infile_) < size)
35 return false;
36 return true;
37 }
38
ReadString(const size_t size,string * str)39 bool FileReader::ReadString(const size_t size, string* str) {
40 if (!ReadDataString(size, str)) return false;
41
42 // Truncate anything after a terminating null.
43 size_t actual_length = strnlen(str->data(), size);
44 str->resize(actual_length);
45 return true;
46 }
47
48 } // namespace quipper
49