-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinode_helper.cpp
More file actions
61 lines (61 loc) · 1.92 KB
/
inode_helper.cpp
File metadata and controls
61 lines (61 loc) · 1.92 KB
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include"inode_helper.h"
#include"user_context.h"
File INodeHelper::CreateFile() {
ID_T new_id = inode_map.findEmptySlot();
ID_T new_content_id = content_map.findEmptySlot();
inode_map.useSlot(new_id);
content_map.useSlot(new_content_id);
INodeStruct inode_struct;
inode_struct.id = new_id;
inode_struct.size = 0;
inode_struct.ref_cnt = 0;
inode_struct.type = INodeType::kFILE;
inode_struct.content_id = new_content_id;
inode_struct.owner_id = UserContext::user_id;
inode_struct.owner_permission = 7;
inode_struct.global_permission = 5;
inode_struct.a_time = time(0);
inode_struct.c_time = time(0);
inode_struct.m_time = time(0);
inode_struct.id = new_id;
INodeStruct * inode_struct_p = SetINode(inode_struct);
File file = File(inode_struct_p);
ContentLoader::CreateContentFile(new_content_id);
file.save();
return file;
}
Dir INodeHelper::CreateDir(ID_T parent_inode_id, const string & name) {
ID_T new_id = inode_map.findEmptySlot();
ID_T new_content_id = content_map.findEmptySlot();
inode_map.useSlot(new_id);
content_map.useSlot(new_content_id);
INodeStruct inode_struct;
inode_struct.id = new_id;
inode_struct.size = 0;
inode_struct.ref_cnt = 1;
inode_struct.type = INodeType::kDIR;
inode_struct.content_id = new_content_id;
inode_struct.owner_id = UserContext::user_id;
inode_struct.owner_permission = 7;
inode_struct.global_permission = 5;
inode_struct.a_time = time(0);
inode_struct.c_time = time(0);
inode_struct.m_time = time(0);
INodeStruct * inode_struct_p = SetINode( inode_struct);
Dir dir = Dir(inode_struct_p);
ContentLoader::CreateContentFile(new_content_id);
dir.save();
dir.addEntry(dir, ".");
if (parent_inode_id == 0) {
dir.addEntry(dir, "..");
}
else {
Dir parent_inode = Dir(parent_inode_id);
dir.addEntry(parent_inode, "..");
parent_inode.addEntry(dir, name);
}
return dir;
}
INodeMap INodeHelper::inode_map;
ContentMap INodeHelper::content_map;
INodeCache INodeHelper::inode_cache;