1/* 2 * Copyright 2022, Raghav Sharma, raghavself28@gmail.com 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef ATTRIBUTE_H 6#define ATTRIBUTE_H 7 8 9#include "Inode.h" 10 11 12struct attr_cookie { 13 char name[B_ATTR_NAME_LENGTH]; 14 uint32 type; 15 int open_mode; 16 bool create; 17}; 18 19 20// This class will act as an interface between all types of attributes for xfs 21class Attribute { 22public: 23 24 virtual ~Attribute() = 0; 25 26 virtual status_t Open(const char* name, int openMode, 27 attr_cookie** _cookie) = 0; 28 29 virtual status_t Stat(attr_cookie* cookie, struct stat& stat) = 0; 30 31 virtual status_t Read(attr_cookie* cookie, off_t pos, 32 uint8* buffer, size_t* length) = 0; 33 34 virtual status_t GetNext(char* name, size_t* nameLength) = 0; 35 36 virtual status_t Lookup(const char* name, size_t* nameLength) = 0; 37 38 static Attribute* Init(Inode* inode); 39}; 40 41#endif