From ac67d9c72dc9c148b7cb80b87da83b500f336efd Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 10 Jan 2023 15:39:56 +0530 Subject: [PATCH] Allow dumping bytes sent to child for debugging --- kitty/child-monitor.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/kitty/child-monitor.c b/kitty/child-monitor.c index 7f7b223c0..f5c911fee 100644 --- a/kitty/child-monitor.c +++ b/kitty/child-monitor.c @@ -1388,6 +1388,18 @@ reap_children(ChildMonitor *self, bool enable_close_on_child_death) { } } +static inline void +print_text(const unsigned char *text, ssize_t sz) { + for (ssize_t i = 0; i < sz; i++) { + unsigned char ch = text[i]; + if (32 <= ch && ch <= 127) { + if (ch == '\\') fprintf(stderr, "%c", ch); + fprintf(stderr, "%c", ch); + } else fprintf(stderr, "\\x%02x", ch); + } +} + + static void write_to_child(int fd, Screen *screen) { size_t written = 0; @@ -1395,7 +1407,15 @@ write_to_child(int fd, Screen *screen) { screen_mutex(lock, write); while (written < screen->write_buf_used) { ret = write(fd, screen->write_buf + written, screen->write_buf_used - written); - if (ret > 0) { written += ret; } +#ifdef KITTY_PRINT_BYTES_SENT_TO_CHILD + fprintf(stderr, "Wrote: %zd bytes: ", ret); +#endif + if (ret > 0) { +#ifdef KITTY_PRINT_BYTES_SENT_TO_CHILD + print_text(screen->write_buf + written, ret); +#endif + written += ret; + } else if (ret == 0) { // could mean anything, ignore break; @@ -1405,6 +1425,9 @@ write_to_child(int fd, Screen *screen) { perror("Call to write() to child fd failed, discarding data."); written = screen->write_buf_used; } +#ifdef KITTY_PRINT_BYTES_SENT_TO_CHILD + fprintf(stderr, "\n"); +#endif } if (written) { screen->write_buf_used -= written;