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