master
h 37 lines 955 Bytes
Raw
1 // Copyright (C) Microsoft Corporation. All rights reserved.
2 #pragma once
3
4 #include "p9fid.h"
5
6 namespace p9fs {
7
8 class XAttr final : public XAttrBase
9 {
10 public:
11 enum class Access
12 {
13 Read,
14 Write
15 };
16
17 XAttr(const std::shared_ptr<const Root>& root, const std::string& fileName, const std::string& name, Access access, UINT64 size = 0, UINT32 flags = 0);
18
19 Task<Expected<UINT32>> Read(UINT64 Offset, gsl::span<gsl::byte> Buffer) override;
20 Task<Expected<UINT32>> Write(UINT64 Offset, gsl::span<const gsl::byte> Buffer) override;
21 LX_INT Clunk() override;
22
23 Expected<UINT64> GetSize() override;
24
25 private:
26 Expected<UINT64> GetValue(gsl::span<gsl::byte> Buffer);
27
28 std::shared_mutex m_Lock;
29 const std::shared_ptr<const Root> m_Root;
30 const std::string m_FileName;
31 const std::string m_Name;
32 std::vector<gsl::byte> m_Value;
33 const Access m_Access;
34 const UINT32 m_Flags;
35 };
36
37 } // namespace p9fs