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 "data_reader.h"
      6 
      7 #include <algorithm>
      8 
      9 #include "base/logging.h"
     10 
     11 #include "binary_data_utils.h"
     12 
     13 namespace quipper {
     14 
     15 bool DataReader::ReadDataString(const size_t size, string* dest) {
     16   if (size == 0) {
     17     dest->clear();
     18     return true;
     19   }
     20   const size_t orig_size = dest->size();
     21   dest->resize(std::max(size, orig_size));
     22   bool ret = ReadData(size, &(*dest)[0]);
     23   dest->resize(ret ? size : orig_size);
     24   return ret;
     25 }
     26 
     27 bool DataReader::ReadDataValue(const size_t size, const string& value_name,
     28                                void* dest) {
     29   if (ReadData(size, dest)) return true;
     30   LOG(ERROR) << "Unable to read " << value_name << ". Requested " << size
     31              << " bytes, " << size_ - Tell() << " bytes remaining.";
     32   return false;
     33 }
     34 
     35 bool DataReader::ReadStringWithSizeFromData(string* dest) {
     36   uint32_t len = 0;
     37   if (!ReadUint32(&len)) {
     38     LOG(ERROR) << "Could not read string length from data.";
     39     return false;
     40   }
     41 
     42   if (!ReadString(len, dest)) {
     43     LOG(ERROR) << "Failed to read string from data. len: " << len;
     44     return false;
     45   }
     46   return true;
     47 }
     48 
     49 }  // namespace quipper
     50