diff options
Diffstat (limited to 'monitor')
-rw-r--r-- | monitor/control.c | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/monitor/control.c b/monitor/control.c index 39a413be1..4022e7644 100644 --- a/monitor/control.c +++ b/monitor/control.c @@ -1300,23 +1300,8 @@ static bool tty_parse_header(uint8_t *hdr, uint8_t len, struct timeval **tv, return true; } -static void tty_callback(int fd, uint32_t events, void *user_data) +static void process_data(struct control_data *data) { - struct control_data *data = user_data; - ssize_t len; - - if (events & (EPOLLERR | EPOLLHUP)) { - mainloop_remove_fd(data->fd); - return; - } - - len = read(data->fd, data->buf + data->offset, - sizeof(data->buf) - data->offset); - if (len < 0) - return; - - data->offset += len; - while (data->offset >= sizeof(struct tty_hdr)) { struct tty_hdr *hdr = (struct tty_hdr *) data->buf; uint16_t pktlen, opcode, data_len; @@ -1358,6 +1343,26 @@ static void tty_callback(int fd, uint32_t events, void *user_data) } } +static void tty_callback(int fd, uint32_t events, void *user_data) +{ + struct control_data *data = user_data; + ssize_t len; + + if (events & (EPOLLERR | EPOLLHUP)) { + mainloop_remove_fd(data->fd); + return; + } + + len = read(data->fd, data->buf + data->offset, + sizeof(data->buf) - data->offset); + if (len < 0) + return; + + data->offset += len; + + process_data(data); +} + int control_tty(const char *path, unsigned int speed) { struct control_data *data; |