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

Method write

os/src/fs/pipe.rs:146–172  ·  view source on GitHub ↗
(&self, buf: UserBuffer)

Source from the content-addressed store, hash-verified

144 }
145 }
146 fn write(&self, buf: UserBuffer) -> usize {
147 assert!(self.writable());
148 let want_to_write = buf.len();
149 let mut buf_iter = buf.into_iter();
150 let mut already_write = 0usize;
151 loop {
152 let mut ring_buffer = self.buffer.exclusive_access();
153 let loop_write = ring_buffer.available_write();
154 if loop_write == 0 {
155 drop(ring_buffer);
156 suspend_current_and_run_next();
157 continue;
158 }
159 // write at most loop_write bytes
160 for _ in 0..loop_write {
161 if let Some(byte_ref) = buf_iter.next() {
162 ring_buffer.write_byte(unsafe { *byte_ref });
163 already_write += 1;
164 if already_write == want_to_write {
165 return want_to_write;
166 }
167 } else {
168 return already_write;
169 }
170 }
171 }
172 }
173}

Callers

nothing calls this directly

Calls 8

dropFunction · 0.85
lenMethod · 0.80
exclusive_accessMethod · 0.80
available_writeMethod · 0.80
write_byteMethod · 0.80
into_iterMethod · 0.45
nextMethod · 0.45

Tested by

no test coverage detected