Exemple #1
0
/* _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);
}
Exemple #2
0
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);
}
Exemple #3
0
/* _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);
}