root/src/add-ons/kernel/file_systems/bfs/Attribute.h
/*
 * Copyright 2004-2008, Axel Dörfler, axeld@pinc-software.de.
 * This file may be used under the terms of the MIT License.
 */
#ifndef ATTRIBUTE_H
#define ATTRIBUTE_H


#include "Inode.h"


struct attr_cookie {
        char    name[B_ATTR_NAME_LENGTH];
        uint32  type;
        int             open_mode;
        bool    create;
};


class Attribute {
public:
                                                        Attribute(Inode* inode);
                                                        Attribute(Inode* inode, attr_cookie* cookie);
                                                        ~Attribute();

                        status_t                InitCheck();
                        status_t                CheckAccess(const char* name, int openMode);

                        status_t                Get(const char* name);
                        void                    Put();

                        status_t                Create(const char* name, type_code type,
                                                                int openMode, attr_cookie** _cookie);
                        status_t                Open(const char* name, int openMode,
                                                                attr_cookie** _cookie);

                        status_t                Stat(struct stat& stat);

                        status_t                Read(attr_cookie* cookie, off_t pos, uint8* buffer,
                                                                size_t* _length);
                        status_t                Write(Transaction& transaction, attr_cookie* cookie,
                                                                off_t pos, const uint8* buffer, size_t* _length,
                                                                bool* _created);

private:
                        status_t                _Truncate();

                        NodeGetter              fNodeGetter;
                        Inode*                  fInode;
                        small_data*             fSmall;
                        Inode*                  fAttribute;
                        const char*             fName;
};

#endif  // ATTRIBUTE_H