/* _term_poll_cb(): polling with old libev code. */ static void _term_poll_cb(uv_poll_t* pol_u, c3_i sas_i, c3_i evt_i) { u2_utty* uty_u = (void*)pol_u; #if 0 fprintf(stderr, "poll_cb read %d, write %d\r\n", !!(UV_READABLE & evt_i), !!(UV_WRITABLE & evt_i)); #endif if ( sas_i != 0 ) { uL(fprintf(uH, "term: poll: %s\n", uv_strerror(uv_last_error(u2L)))); } else { if ( UV_READABLE & evt_i ) { u2_lo_open(); while ( 1 ) { c3_y buf_y[4096]; c3_i siz_i, i; if ( (siz_i = read(uty_u->fid_i, buf_y, 4096)) < 0) { if ( EAGAIN == errno ) { break; } else { c3_assert(!"term: read"); } } for ( i=0; i < siz_i; i++ ) { _term_io_suck_char(uty_u, buf_y[i]); } if ( 4096 != siz_i ) { break; } } u2_lo_shut(u2_yes); } if ( UV_WRITABLE & evt_i ) { _term_it_do_writes(uty_u); } } _term_ef_poll(uty_u); }
static inline void _term_suck(u3_utty* uty_u, const c3_y* buf, ssize_t siz_i) { u3_lo_open(); { if ( siz_i == UV_EOF ) { // nothing } else if ( siz_i < 0 ) { uL(fprintf(uH, "term %d: read: %s\n", uty_u->tid_l, uv_strerror(siz_i))); } else { c3_i i; for ( i=0; i < siz_i; i++ ) { _term_io_suck_char(uty_u, buf[i]); } } } u3_lo_shut(c3y); }
/* _term_read_cb(): server read callback. */ static void _term_read_cb(uv_stream_t* str_u, ssize_t siz_i, uv_buf_t buf_u) { u2_utty* uty_u = (u2_utty*)(void*)str_u; u2_lo_open(); { if ( siz_i < 0 ) { uv_err_t las_u = uv_last_error(u2L); uL(fprintf(uH, "term: read: %s\n", uv_strerror(las_u))); } else { c3_i i; for ( i=0; i < siz_i; i++ ) { _term_io_suck_char(uty_u, buf_u.base[i]); } } } u2_lo_shut(u2_yes); }