Allow dumping bytes sent to child for debugging

This commit is contained in:
Kovid Goyal 2023-01-10 15:39:56 +05:30
parent b9692d480a
commit ac67d9c72d
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -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 static void
write_to_child(int fd, Screen *screen) { write_to_child(int fd, Screen *screen) {
size_t written = 0; size_t written = 0;
@ -1395,7 +1407,15 @@ write_to_child(int fd, Screen *screen) {
screen_mutex(lock, write); screen_mutex(lock, write);
while (written < screen->write_buf_used) { while (written < screen->write_buf_used) {
ret = write(fd, screen->write_buf + written, screen->write_buf_used - written); 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) { else if (ret == 0) {
// could mean anything, ignore // could mean anything, ignore
break; break;
@ -1405,6 +1425,9 @@ write_to_child(int fd, Screen *screen) {
perror("Call to write() to child fd failed, discarding data."); perror("Call to write() to child fd failed, discarding data.");
written = screen->write_buf_used; written = screen->write_buf_used;
} }
#ifdef KITTY_PRINT_BYTES_SENT_TO_CHILD
fprintf(stderr, "\n");
#endif
} }
if (written) { if (written) {
screen->write_buf_used -= written; screen->write_buf_used -= written;