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 ); }
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; }
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); } } }