Android-cuttlefish cvd tool
writable_source.h
Go to the documentation of this file.
1//
2// Copyright (C) 2025 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15
16#pragma once
17
18#include <stddef.h>
19#include <stdint.h>
20
21#include <mutex>
22#include <string>
23
25#include "cuttlefish/io/io.h"
27
28namespace cuttlefish {
29
31 public:
32 friend class ReadableZip;
33 /* References `data`, may not update it on write but `data` should outlive the
34 * returned instance. */
35 static Result<WritableZipSource> BorrowData(const void* data, size_t size);
36 static Result<WritableZipSource> FromFile(const std::string& path);
37 /* Data access to an in-memory buffer based on serializing a zip archive. */
39
41 virtual ~WritableZipSource() = default;
43
44 /* Returns a RAII instance that puts this instance in an "open for writing"
45 * state. Can fail. Should not outlive this instance. Cannot be used at the
46 * same time as the `Reader()` method from superclasses. */
48
49 protected:
51};
52
53/* A `WritableZipSource` in an "open for writing" state. */
55 public:
56 friend class WritableZipSource;
57
61
62 /* Writes are not committed until `Finalize` is called. Returns number of
63 * bytes written. */
64 Result<uint64_t> Write(const void* data, uint64_t length) override;
65 Result<uint64_t> SeekSet(uint64_t offset) override;
66 Result<uint64_t> SeekCur(int64_t offset) override;
67 Result<uint64_t> SeekEnd(int64_t offset) override;
68 Result<uint64_t> PWrite(const void* data, uint64_t count,
69 uint64_t offset) override;
70
71 /* Commits writes and closes the writer. */
73
74 private:
76
77 Result<uint64_t> Seek(int64_t offset, int whence);
78
80 std::recursive_mutex mutex_;
81};
82
83} // namespace cuttlefish
Definition: archive.h:35
Definition: seekable_source.h:31
friend class WritableZipSource
Definition: seekable_source.h:34
Definition: writable_source.h:30
virtual ~WritableZipSource()=default
WritableZipSource & operator=(WritableZipSource &&)=default
Result< class ZipSourceWriter > Writer()
Definition: writable_source.cc:60
static Result< WritableZipSource > BorrowData(const void *data, size_t size)
Definition: writable_source.cc:35
WritableZipSource(WritableZipSource &&)=default
static Result< WritableZipSource > FromFile(const std::string &path)
Definition: writable_source.cc:47
static Result< WritableZipSource > FromZip(class WritableZip)
Definition: archive.cc:206
Definition: archive.h:70
Definition: io.h:68
Definition: writable_source.h:54
static Result< void > Finalize(ZipSourceWriter)
Definition: writable_source.cc:118
ZipSourceWriter(ZipSourceWriter &&)
Definition: writable_source.cc:70
Result< uint64_t > SeekSet(uint64_t offset) override
Definition: writable_source.cc:100
Result< uint64_t > PWrite(const void *data, uint64_t count, uint64_t offset) override
Definition: writable_source.cc:112
Result< uint64_t > Seek(int64_t offset, int whence)
Definition: writable_source.cc:128
~ZipSourceWriter()
Definition: writable_source.cc:81
Result< uint64_t > SeekCur(int64_t offset) override
Definition: writable_source.cc:104
ZipSourceWriter & operator=(ZipSourceWriter &&)
Definition: writable_source.cc:75
Result< uint64_t > Write(const void *data, uint64_t length) override
Definition: writable_source.cc:87
WritableZipSource * source_
Definition: writable_source.h:79
Result< uint64_t > SeekEnd(int64_t offset) override
Definition: writable_source.cc:108
std::recursive_mutex mutex_
Definition: writable_source.h:80
#define data
Definition: dict.c:56
uint32_t size
Definition: io.h:2
Definition: alloc_driver.h:20
std::unique_ptr< zip_source_t, ZipDeleter > ManagedZipSource
Definition: managed.h:37
tl::expected< T, StackTraceError > Result
Definition: result_type.h:30