/* * Copyright 2022, Raghav Sharma, raghavself28@gmail.com * Distributed under the terms of the MIT License. */ #ifndef NODE_ATTRIBUTE_H #define NODE_ATTRIBUTE_H #include "LeafAttribute.h" #include "Node.h" class NodeAttribute : public Attribute { public: NodeAttribute(Inode* inode); ~NodeAttribute(); status_t Init(); status_t Stat(attr_cookie* cookie, struct stat& stat); status_t Read(attr_cookie* cookie, off_t pos, uint8* buffer, size_t* length); status_t Open(const char* name, int openMode, attr_cookie** _cookie); status_t GetNext(char* name, size_t* nameLength); status_t Lookup(const char* name, size_t* nameLength); private: status_t _FillMapEntry(xfs_extnum_t num); status_t _FillBuffer(char* buffer, xfs_fsblock_t block); xfs_fsblock_t _LogicalToFileSystemBlock(uint32 LogicalBlock); Inode* fInode; const char* fName; ExtentMapEntry* fMap; char* fLeafBuffer; char* fNodeBuffer; uint16 fLastEntryOffset; uint16 fLastNodeOffset; uint8 fNodeFlag; AttrLeafNameLocal* fLocalEntry; AttrLeafNameRemote* fRemoteEntry; }; #endif