(&self, buf: UserBuffer)
| 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 | } |
nothing calls this directly
no test coverage detected