+static void pty_try_write(Pty pty)
+{
+ void *data;
+ int len, ret;
+
+ assert(pty->master_fd >= 0);
+
+ while (bufchain_size(&pty->output_data) > 0) {
+ bufchain_prefix(&pty->output_data, &data, &len);
+ ret = write(pty->master_fd, data, len);
+
+ if (ret < 0 && (errno == EWOULDBLOCK)) {
+ /*
+ * We've sent all we can for the moment.
+ */
+ break;
+ }
+ if (ret < 0) {
+ perror("write pty master");
+ exit(1);
+ }
+ bufchain_consume(&pty->output_data, ret);
+ }
+
+ pty_uxsel_setup(pty);
+}
+