MCPcopy Create free account
hub / github.com/LemonOSProject/LemonOS / Master_Write

Method Master_Write

Kernel/src/tty/pty.cpp:188–228  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

186}
187
188size_t PTY::Master_Write(char* buffer, size_t count){
189 size_t ret = slave.Write(buffer, count);
190
191 if(slaveBlocker.blocked.get_length()){
192 if(IsCanonical()){
193 while(slave.lines && slaveBlocker.blocked.get_length()){
194 Scheduler::UnblockThread(slaveBlocker.blocked.remove_at(0));
195 }
196 } else {
197 while(slave.bufferPos && slaveBlocker.blocked.get_length()){
198 Scheduler::UnblockThread(slaveBlocker.blocked.remove_at(0));
199 }
200 }
201 }
202
203 if(Echo() && ret){
204 for(unsigned i = 0; i < count; i++){
205 if(buffer[i] == '\e'){ // Escape
206 master.Write("^[", 2);
207 } else {
208 master.Write(&buffer[i], 1);
209 }
210 }
211 }
212
213 if(IsCanonical()){
214 if(slave.lines && watchingSlave.get_length()){
215 while(watchingSlave.get_length()){
216 watchingSlave.remove_at(0)->Signal(); // Signal all watching
217 }
218 }
219 } else {
220 if(slave.bufferPos && watchingSlave.get_length()){
221 while(watchingSlave.get_length()){
222 watchingSlave.remove_at(0)->Signal(); // Signal all watching
223 }
224 }
225 }
226
227 return ret;
228}
229
230size_t PTY::Slave_Write(char* buffer, size_t count){
231 size_t written = master.Write(buffer, count);

Callers 1

WriteMethod · 0.80

Calls 5

UnblockThreadFunction · 0.85
SignalMethod · 0.80
WriteMethod · 0.45
get_lengthMethod · 0.45
remove_atMethod · 0.45

Tested by

no test coverage detected