| // Copyright 2019 The Fuchsia 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_STORAGE_LIB_PAVER_STREAM_READER_H_ |
| #define SRC_STORAGE_LIB_PAVER_STREAM_READER_H_ |
| |
| #include <fidl/fuchsia.paver/cpp/wire.h> |
| #include <lib/zx/channel.h> |
| #include <lib/zx/result.h> |
| #include <lib/zx/vmo.h> |
| |
| #include <memory> |
| |
| #include "src/storage/fvm/sparse_reader.h" |
| |
| namespace paver { |
| |
| // Implements fvm::ReaderInterface to allow interoperability between paver and |
| // fvm sparse reader library. |
| class StreamReader : public fvm::ReaderInterface { |
| public: |
| static zx::result<std::unique_ptr<StreamReader>> Create( |
| fidl::ClientEnd<fuchsia_paver::PayloadStream> stream); |
| |
| ~StreamReader() override = default; |
| |
| zx_status_t Read(void* buf, size_t buf_size, size_t* size_actual) final; |
| |
| private: |
| StreamReader(fidl::ClientEnd<fuchsia_paver::PayloadStream> stream, zx::vmo vmo) |
| : stream_(std::move(stream)), vmo_(std::move(vmo)) {} |
| |
| StreamReader(const StreamReader&) = delete; |
| StreamReader& operator=(const StreamReader&) = delete; |
| StreamReader(StreamReader&&) = delete; |
| StreamReader& operator=(StreamReader&&) = delete; |
| |
| fidl::WireSyncClient<fuchsia_paver::PayloadStream> stream_; |
| zx::vmo vmo_; |
| zx_off_t offset_ = 0; |
| size_t size_ = 0; |
| }; |
| |
| } // namespace paver |
| |
| #endif // SRC_STORAGE_LIB_PAVER_STREAM_READER_H_ |