Home | History | Annotate | Download | only in bsdiff
      1 // Copyright 2016 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 "bsdiff/memory_file.h"
      6 
      7 #include <algorithm>
      8 #include <string.h>
      9 
     10 namespace bsdiff {
     11 
     12 MemoryFile::MemoryFile(const uint8_t* data, size_t size)
     13     : data_(data), size_(size) {}
     14 
     15 bool MemoryFile::Read(void* buf, size_t count, size_t* bytes_read) {
     16   count = std::min(count, static_cast<size_t>(size_ - offset_));
     17   memcpy(buf, data_ + offset_, count);
     18   offset_ += count;
     19   *bytes_read = count;
     20   return true;
     21 }
     22 
     23 bool MemoryFile::Write(const void* buf, size_t count, size_t* bytes_written) {
     24   return false;
     25 }
     26 
     27 bool MemoryFile::Seek(off_t pos) {
     28   if (pos > static_cast<off_t>(size_) || pos < 0)
     29     return false;
     30   offset_ = pos;
     31   return true;
     32 }
     33 
     34 bool MemoryFile::Close() {
     35   return true;
     36 }
     37 
     38 bool MemoryFile::GetSize(uint64_t* size) {
     39   *size = size_;
     40   return true;
     41 }
     42 
     43 }  // namespace bsdiff
     44