diff --git a/vt.c b/vt.c index 4d04f4ba..92caea3f 100644 --- a/vt.c +++ b/vt.c @@ -2,6 +2,7 @@ #include #include +#include #include #define LOG_MODULE "vt" @@ -973,3 +974,23 @@ vt_from_slave(struct terminal *term, const uint8_t *data, size_t len) } } } + +bool +vt_to_slave(struct terminal *term, const void *_data, size_t len) +{ + const uint8_t *data = _data; + size_t left = len; + + while (left > 0) { + ssize_t ret = write(term->ptmx, data, left); + if (ret < 0) { + LOG_ERRNO("failed to write to client"); + return false; + } + + data += ret; + left -= ret; + } + + return true; +} diff --git a/vt.h b/vt.h index 0e85a75b..302dc6dc 100644 --- a/vt.h +++ b/vt.h @@ -6,6 +6,7 @@ #include "terminal.h" void vt_from_slave(struct terminal *term, const uint8_t *data, size_t len); +bool vt_to_slave(struct terminal *term, const void *data, size_t len); static inline int vt_param_get(const struct terminal *term, size_t idx, int default_value)