1*db1b905eSJérôme Duval /* 2*db1b905eSJérôme Duval * Copyright 2010, Jérôme Duval, korli@users.berlios.de. 3*db1b905eSJérôme Duval * Copyright 2004-2008, Axel Dörfler, axeld@pinc-software.de. 4*db1b905eSJérôme Duval * This file may be used under the terms of the MIT License. 5*db1b905eSJérôme Duval */ 6*db1b905eSJérôme Duval #ifndef ATTRIBUTE_H 7*db1b905eSJérôme Duval #define ATTRIBUTE_H 8*db1b905eSJérôme Duval 9*db1b905eSJérôme Duval 10*db1b905eSJérôme Duval #include "CachedBlock.h" 11*db1b905eSJérôme Duval #include "Inode.h" 12*db1b905eSJérôme Duval 13*db1b905eSJérôme Duval 14*db1b905eSJérôme Duval struct attr_cookie { 15*db1b905eSJérôme Duval char name[B_ATTR_NAME_LENGTH]; 16*db1b905eSJérôme Duval uint32 type; 17*db1b905eSJérôme Duval int open_mode; 18*db1b905eSJérôme Duval bool create; 19*db1b905eSJérôme Duval }; 20*db1b905eSJérôme Duval 21*db1b905eSJérôme Duval 22*db1b905eSJérôme Duval class Attribute { 23*db1b905eSJérôme Duval public: 24*db1b905eSJérôme Duval Attribute(Inode* inode); 25*db1b905eSJérôme Duval Attribute(Inode* inode, attr_cookie* cookie); 26*db1b905eSJérôme Duval ~Attribute(); 27*db1b905eSJérôme Duval 28*db1b905eSJérôme Duval status_t InitCheck(); 29*db1b905eSJérôme Duval status_t CheckAccess(const char* name, int openMode); 30*db1b905eSJérôme Duval 31*db1b905eSJérôme Duval status_t Find(const char* name); 32*db1b905eSJérôme Duval status_t Find(int32 index); 33*db1b905eSJérôme Duval status_t GetName(char* name, size_t* _nameLength); 34*db1b905eSJérôme Duval void Put(); 35*db1b905eSJérôme Duval 36*db1b905eSJérôme Duval status_t Create(const char* name, type_code type, 37*db1b905eSJérôme Duval int openMode, attr_cookie** _cookie); 38*db1b905eSJérôme Duval status_t Open(const char* name, int openMode, 39*db1b905eSJérôme Duval attr_cookie** _cookie); 40*db1b905eSJérôme Duval 41*db1b905eSJérôme Duval status_t Stat(struct stat& stat); 42*db1b905eSJérôme Duval 43*db1b905eSJérôme Duval status_t Read(attr_cookie* cookie, off_t pos, uint8* buffer, 44*db1b905eSJérôme Duval size_t* _length); 45*db1b905eSJérôme Duval status_t Write(Transaction& transaction, attr_cookie* cookie, 46*db1b905eSJérôme Duval off_t pos, const uint8* buffer, 47*db1b905eSJérôme Duval size_t* _length, bool* _created); 48*db1b905eSJérôme Duval 49*db1b905eSJérôme Duval private: 50*db1b905eSJérôme Duval status_t _Truncate(); 51*db1b905eSJérôme Duval status_t _Find(const char* name, int32 index); 52*db1b905eSJérôme Duval status_t _FindAttributeBody(const uint8* start, const uint8* end, 53*db1b905eSJérôme Duval const char* name, int32 index, int32 *count, 54*db1b905eSJérôme Duval ext2_xattr_entry** entry); 55*db1b905eSJérôme Duval status_t _FindAttributeBlock(const uint8* start, const uint8* end, 56*db1b905eSJérôme Duval const char* name, int32 index, int32 *count, 57*db1b905eSJérôme Duval ext2_xattr_entry** entry); 58*db1b905eSJérôme Duval status_t _FindAttribute(const uint8* start, const uint8* end, 59*db1b905eSJérôme Duval const char* name, int32 index, int32 *count, 60*db1b905eSJérôme Duval ext2_xattr_entry** entry); 61*db1b905eSJérôme Duval status_t _PrefixedName(ext2_xattr_entry* entry, char* _name, 62*db1b905eSJérôme Duval size_t* _nameLength); 63*db1b905eSJérôme Duval 64*db1b905eSJérôme Duval ::Volume* fVolume; 65*db1b905eSJérôme Duval CachedBlock fBlock; 66*db1b905eSJérôme Duval Inode* fInode; 67*db1b905eSJérôme Duval ext2_xattr_entry* fBodyEntry; 68*db1b905eSJérôme Duval ext2_xattr_entry* fBlockEntry; 69*db1b905eSJérôme Duval const char* fName; 70*db1b905eSJérôme Duval }; 71*db1b905eSJérôme Duval 72*db1b905eSJérôme Duval #endif // ATTRIBUTE_H 73