summaryrefslogtreecommitdiff
path: root/Source/Kernel/VFS/FileNode.class.h
blob: e99ef5e87425178fa6d18dacdc61e2d5514a81a1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#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