terminal session: return number of bytes written

To better support non-blocking terminal components, let the
'Terminal::Session::write()' function return the number of bytes
actually written.

Fixes #2240
This commit is contained in:
Christian Prochaska
2017-01-17 15:45:54 +01:00
committed by Norman Feske
parent 9f7a4feab4
commit dbb641d44a
11 changed files with 65 additions and 31 deletions

View File

@ -277,14 +277,15 @@ class Terminal::Session_component : public Rpc_object<Session, Session_component
return num_bytes;
}
void _write(size_t num_bytes)
size_t _write(size_t num_bytes)
{
char *dst = _io_buffer.local_addr<char>();
while (num_bytes) {
size_t size = _driver.write(dst, num_bytes);
num_bytes -= size;
dst += size;
size_t written_bytes;
for (written_bytes = 0; written_bytes < num_bytes; ) {
written_bytes += _driver.write(dst + written_bytes,
num_bytes - written_bytes);
}
return written_bytes;
}
Dataspace_capability _dataspace() { return _io_buffer.cap(); }