Home | History | Annotate | Download | only in quipper
      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 
     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 
     27 FileReader::~FileReader() {
     28   if (IsOpen()) {
     29     fclose(infile_);
     30   }
     31 }
     32 
     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 
     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