Пример #1
0
void CandidateWindow::slotStdinActivated( int fd )
{
    char buf[ 4096 ];
    char *read_buf = strdup( "" );
    int n;

    while (uim_helper_fd_readable( fd ) > 0) {
        n = read( fd, buf, 4096 - 1 );
        if ( n == 0 )
        {
            close( fd );
            exit( 1 );
        }
        if ( n == -1 )
            return ;
        buf[ n ] = '\0';
	read_buf = (char *)realloc( read_buf, strlen( read_buf ) + n + 1 );
	strcat( read_buf, buf );
    }

    QStringList msgList = QStringList::split( "\f\f", QString( read_buf ) );

    QStringList::Iterator it = msgList.begin();
    const QStringList::Iterator end = msgList.end();
    for ( ; it != end; ++it )
        strParse( ( *it ) );
    free( read_buf );
}
Пример #2
0
static gboolean
read_cb(GIOChannel *channel, GIOCondition c, gpointer p)
{
  char buf[CANDIDATE_BUFFER_SIZE];
  char *read_buf = strdup("");
  int i = 0;
  int n;
  gchar **tmp;
  int fd = g_io_channel_unix_get_fd(channel);

  while (uim_helper_fd_readable(fd) > 0) {
    n = read(fd, buf, CANDIDATE_BUFFER_SIZE - 1);
    if (n == 0) {
      close(fd);
      exit(EXIT_FAILURE);
    }
    if (n == -1)
      return TRUE;
    buf[n] = '\0';
    read_buf = realloc(read_buf, strlen(read_buf) + n + 1);
    strcat(read_buf, buf);
  }

  tmp = g_strsplit(read_buf, "\f\f", 0);

  while (tmp[i]) {
    str_parse(tmp[i]);
    i++;
  }
  g_strfreev(tmp);
  free(read_buf);
  return TRUE;
}
Пример #3
0
void
uim_helper_read_proc(int fd)
{
  int rc;

  while (uim_helper_fd_readable(fd) > 0) {
    rc = read(fd, uim_recv_buf, sizeof(uim_recv_buf));
    if (rc == 0 || (rc == -1 && errno != EAGAIN)) {
      uim_helper_close_client_fd(fd);
      return;
    } else if (rc > 0) {
      uim_read_buf = uim_helper_buffer_append(uim_read_buf, uim_recv_buf, rc);
    }
  }
}