xref: /aosp_15_r20/external/cronet/base/fuchsia/mem_buffer_util.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2018 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_FUCHSIA_MEM_BUFFER_UTIL_H_
6*6777b538SAndroid Build Coastguard Worker #define BASE_FUCHSIA_MEM_BUFFER_UTIL_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include <fuchsia/mem/cpp/fidl.h>
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker #include <optional>
11*6777b538SAndroid Build Coastguard Worker #include <string>
12*6777b538SAndroid Build Coastguard Worker #include <string_view>
13*6777b538SAndroid Build Coastguard Worker 
14*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h"
15*6777b538SAndroid Build Coastguard Worker #include "base/files/file.h"
16*6777b538SAndroid Build Coastguard Worker 
17*6777b538SAndroid Build Coastguard Worker namespace base {
18*6777b538SAndroid Build Coastguard Worker 
19*6777b538SAndroid Build Coastguard Worker // Returns the contents of `buffer` (which must be a valid UTF-8 string), or
20*6777b538SAndroid Build Coastguard Worker // null in case of a conversion error.
21*6777b538SAndroid Build Coastguard Worker BASE_EXPORT std::optional<std::u16string> ReadUTF8FromVMOAsUTF16(
22*6777b538SAndroid Build Coastguard Worker     const fuchsia::mem::Buffer& buffer);
23*6777b538SAndroid Build Coastguard Worker 
24*6777b538SAndroid Build Coastguard Worker // Creates a Fuchsia VMO from `data`. The size of the resulting virtual memory
25*6777b538SAndroid Build Coastguard Worker // object will be set to the size of the string, and it will be given the name
26*6777b538SAndroid Build Coastguard Worker // `name`.
27*6777b538SAndroid Build Coastguard Worker BASE_EXPORT zx::vmo VmoFromString(std::string_view data, std::string_view name);
28*6777b538SAndroid Build Coastguard Worker 
29*6777b538SAndroid Build Coastguard Worker // Creates a Fuchsia memory buffer from `data`. The resulting virtual memory
30*6777b538SAndroid Build Coastguard Worker // object will be given the name `name`.
31*6777b538SAndroid Build Coastguard Worker // `fuchsia::mem::Buffer` is deprecated: for new interfaces, prefer using
32*6777b538SAndroid Build Coastguard Worker // a VMO object directly (see `VmoFromString`).
33*6777b538SAndroid Build Coastguard Worker BASE_EXPORT fuchsia::mem::Buffer MemBufferFromString(std::string_view data,
34*6777b538SAndroid Build Coastguard Worker                                                      std::string_view name);
35*6777b538SAndroid Build Coastguard Worker 
36*6777b538SAndroid Build Coastguard Worker // Creates a Fuchsia memory buffer from the UTF-16 string `data`. The resulting
37*6777b538SAndroid Build Coastguard Worker // virtual memory object will be given the name `name`.
38*6777b538SAndroid Build Coastguard Worker BASE_EXPORT fuchsia::mem::Buffer MemBufferFromString16(std::u16string_view data,
39*6777b538SAndroid Build Coastguard Worker                                                        std::string_view name);
40*6777b538SAndroid Build Coastguard Worker 
41*6777b538SAndroid Build Coastguard Worker // Returns the contents of `data`, or null if the read operation fails.
42*6777b538SAndroid Build Coastguard Worker BASE_EXPORT std::optional<std::string> StringFromVmo(const zx::vmo& vmo);
43*6777b538SAndroid Build Coastguard Worker 
44*6777b538SAndroid Build Coastguard Worker // Returns the contents of `buffer`, or null if the read operation fails.
45*6777b538SAndroid Build Coastguard Worker // `fuchsia::mem::Buffer` is deprecated: for new interfaces, prefer using
46*6777b538SAndroid Build Coastguard Worker // a VMO object directly (see `StringFromVmo`).
47*6777b538SAndroid Build Coastguard Worker BASE_EXPORT std::optional<std::string> StringFromMemBuffer(
48*6777b538SAndroid Build Coastguard Worker     const fuchsia::mem::Buffer& buffer);
49*6777b538SAndroid Build Coastguard Worker 
50*6777b538SAndroid Build Coastguard Worker // Returns the contents of `data`, or null if the read operation fails.
51*6777b538SAndroid Build Coastguard Worker BASE_EXPORT std::optional<std::string> StringFromMemData(
52*6777b538SAndroid Build Coastguard Worker     const fuchsia::mem::Data& data);
53*6777b538SAndroid Build Coastguard Worker 
54*6777b538SAndroid Build Coastguard Worker // Creates a memory-mapped, read-only Buffer with the contents of `file`. Will
55*6777b538SAndroid Build Coastguard Worker // return an empty Buffer if the file could not be opened.
56*6777b538SAndroid Build Coastguard Worker BASE_EXPORT fuchsia::mem::Buffer MemBufferFromFile(File file);
57*6777b538SAndroid Build Coastguard Worker 
58*6777b538SAndroid Build Coastguard Worker // Creates a non-resizeable, copy-on-write shared memory clone of `buffer`. The
59*6777b538SAndroid Build Coastguard Worker // resulting virtual memory object will be given the name `name`.
60*6777b538SAndroid Build Coastguard Worker BASE_EXPORT fuchsia::mem::Buffer CloneBuffer(const fuchsia::mem::Buffer& buffer,
61*6777b538SAndroid Build Coastguard Worker                                              std::string_view name);
62*6777b538SAndroid Build Coastguard Worker 
63*6777b538SAndroid Build Coastguard Worker }  // namespace base
64*6777b538SAndroid Build Coastguard Worker 
65*6777b538SAndroid Build Coastguard Worker #endif  // BASE_FUCHSIA_MEM_BUFFER_UTIL_H_
66