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

@ -117,16 +117,19 @@ class Terminal::Session_component : public Rpc_object<Session, Session_component
size_t _read(size_t dst_len) { return 0; }
void _write(Genode::size_t num_bytes)
size_t _write(Genode::size_t num_bytes)
{
/* sanitize argument */
num_bytes = Genode::min(num_bytes, _io_buffer.size());
char const *src = _io_buffer.local_addr<char>();
for (size_t written_bytes = 0; written_bytes < num_bytes; )
size_t written_bytes;
for (written_bytes = 0; written_bytes < num_bytes; )
written_bytes += _output.write(src + written_bytes,
num_bytes - written_bytes);
return written_bytes;
}
Dataspace_capability _dataspace() { return _io_buffer.cap(); }