MCPcopy Create free account
hub / github.com/chyyuu/os_kernel_lab / open_file

Function open_file

os/src/fs/inode.rs:85–106  ·  view source on GitHub ↗
(name: &str, flags: OpenFlags)

Source from the content-addressed store, hash-verified

83}
84
85pub fn open_file(name: &str, flags: OpenFlags) -> Option<Arc<OSInode>> {
86 let (readable, writable) = flags.read_write();
87 if flags.contains(OpenFlags::CREATE) {
88 if let Some(inode) = ROOT_INODE.find(name) {
89 // clear size
90 inode.clear();
91 Some(Arc::new(OSInode::new(readable, writable, inode)))
92 } else {
93 // create file
94 ROOT_INODE
95 .create(name)
96 .map(|inode| Arc::new(OSInode::new(readable, writable, inode)))
97 }
98 } else {
99 ROOT_INODE.find(name).map(|inode| {
100 if flags.contains(OpenFlags::TRUNC) {
101 inode.clear();
102 }
103 Arc::new(OSInode::new(readable, writable, inode))
104 })
105 }
106}
107
108impl File for OSInode {
109 fn readable(&self) -> bool {

Callers 2

sys_execFunction · 0.85
sys_openFunction · 0.85

Calls 6

read_writeMethod · 0.80
containsMethod · 0.80
findMethod · 0.80
clearMethod · 0.80
mapMethod · 0.45
createMethod · 0.45

Tested by

no test coverage detected