-
Notifications
You must be signed in to change notification settings - Fork 3.5k
/
Copy pathmodule.cc
85 lines (71 loc) · 1.57 KB
/
module.cc
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <os.h>
#include <core/file.h>
#include <runtime/alloc.h>
#include <runtime/libc.h>
#include <core/filesystem.h>
#include <module.h>
/* Inclusion de la liste des modules */
#include "modules.conf"
Module::Module(){
}
Module::~Module(){
}
void Module::initLink(){
int i=0;
ModLink* mod;
while (module_builder[i] != 0){
mod=new ModLink(module_builder[i]->module_name);
i++;
}
}
File* Module::createDevice(char* name,char* module,u32 flag){
int i=0;
File* fp;
while (module_builder[i] != 0){
if (!strcmp(module_builder[i]->module_name,module)){
if (module_builder[i]->module_type==MODULE_DEVICE){
fp=module_builder[i]->drive(name,flag,NULL);
return fp;
}
}
i++;
}
return NULL;
}
File* Module::mount(char* dev,char* dir,char* module,u32 flag){
File* fdev=fsm.path(dev);
if (fdev==NULL)
return NULL;
int i=0;
File* fp;
while (module_builder[i] != 0){
if (!strcmp(module_builder[i]->module_name,module)){
fp=module_builder[i]->drive(dir,flag,fdev);
if (module_builder[i]->module_type==MODULE_FILESYSTEM && fp!=NULL){
fsm.addFile("/mnt/",fp);
fp->setType(TYPE_DIRECTORY);
return fp;
}
else
return NULL;
}
i++;
}
return NULL;
}
File* Module::install(char* dir,char* module,u32 flag,char* dev){
File* fdev=fsm.path(dev);
if (fdev==NULL)
return NULL;
int i=0;
File* fp;
while (module_builder[i] != 0){
if (!strcmp(module_builder[i]->module_name,module)){
if (module_builder[i]->module_type==MODULE_FILESYSTEM){
return module_builder[i]->drive(dir,flag,fdev);
}
}
i++;
}
return NULL;
}