// Copyright 2017 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. #ifndef SRC_FILE_STREAM_H_ #define SRC_FILE_STREAM_H_ #include <string> #include <utility> #include "puffin/common.h" #include "puffin/stream.h" namespace puffin { // A very simple class for reading and writing data into a file descriptor. class FileStream : public StreamInterface { public: explicit FileStream(int fd) : fd_(fd) { Seek(0); } ~FileStream() override = default; static UniqueStreamPtr Open(const std::string& path, bool read, bool write); bool GetSize(uint64_t* size) const override; bool GetOffset(uint64_t* offset) const override; bool Seek(uint64_t offset) override; bool Read(void* buffer, size_t length) override; bool Write(const void* buffer, size_t length) override; bool Close() override; protected: FileStream() = default; private: // The file descriptor. int fd_; DISALLOW_COPY_AND_ASSIGN(FileStream); }; } // namespace puffin #endif // SRC_FILE_STREAM_H_