summaryrefslogblamecommitdiff
path: root/Source/Kernel/VFS/FileNode.class.h
blob: e99ef5e87425178fa6d18dacdc61e2d5514a81a1 (plain) (tree)
1
2
3
4
5
6
7
8
9





                                

                          
                  

                                    
                                                                                                           

                                                                                                                 

               

                              
                                        
                                         
                                                                  
                                                        











                                                                      


      
#ifndef DEF_FILENODE_CLASS_H
#define DEF_FILENODE_CLASS_H

#include <VFS/FSNode.proto.h>

class FileNode : public FSNode {
	friend class File;

	protected:
	u32int m_readers, m_writers;

	FileNode(String name, FileSystem* fs, FSNode* parent, u32int length = 0, u32int permissions = 0777,
			u32int uid = 0, u32int gid = 0): FSNode(name, fs, parent, length, permissions, uid, gid),
			m_readers(0), m_writers(0) {}

	public:
	virtual ~FileNode() {}

	u8int type() { return NT_FILE; }
	bool removable() { return true; }
	bool used() { return (m_readers != 0 or m_writers != 0); }
	bool fsWritable() { return m_fs->isWritable(); }

	u32int read(u64int position, u32int max_length, u8int *data) {
		return m_fs->read(this, position, max_length, data);
	}

	bool write(u64int position, u32int length, u8int *data) {
		return m_fs->write(this, position, length, data);
	}

	bool truncate() {
		return m_fs->truncate(this);
	}
};

#endif