bool pipex_readln_nb(pipex_t *pipex, char *string){ while(!pipex->io->in_eof && !io_line_ready(pipex->io) && io_peek(pipex->io)){ io_get_update(pipex->io); } if(io_line_ready(pipex->io)){ return pipex_readln(pipex,string); }else if(pipex->io->in_eof){ string[0]='\0'; pipex->state|=PIPEX_EOF; return FALSE; }else { string[0]='\0'; return FALSE; } }
static void adapter_step() { fd_set set[1]; int fd_max; int val; // process buffered lines while (io_line_ready(XBoard->io)) xboard_step(); // process available xboard lines while (io_line_ready(Engine->io)) engine_step(); // process available engine lines // init FD_ZERO(set); fd_max = -1; // HACK // add xboard input ASSERT(XBoard->io->in_fd>=0); FD_SET(XBoard->io->in_fd,set); if (XBoard->io->in_fd > fd_max) fd_max = XBoard->io->in_fd; // add engine input ASSERT(Engine->io->in_fd>=0); FD_SET(Engine->io->in_fd,set); if (Engine->io->in_fd > fd_max) fd_max = Engine->io->in_fd; // wait for something to read (no timeout) ASSERT(fd_max>=0); val = select(fd_max+1,set,NULL,NULL,NULL); if (val == -1 && errno != EINTR) my_fatal("adapter_step(): select(): %s\n",strerror(errno)); if (val > 0) { if (FD_ISSET(XBoard->io->in_fd,set)) io_get_update(XBoard->io); // read some xboard input if (FD_ISSET(Engine->io->in_fd,set)) io_get_update(Engine->io); // read some engine input } }
void engine_get(engine_t * engine, char string[], int size) { ASSERT(engine_is_ok(engine)); ASSERT(string!=NULL); ASSERT(size>=256); while (!io_line_ready(engine->io)) { io_get_update(engine->io); } if (!io_get_line(engine->io,string,size)) { // EOF exit(EXIT_SUCCESS); } }
bool pipex_readln(pipex_t *pipex, char *string){ while (!io_line_ready(pipex->io)) { io_get_update(pipex->io); } if (!io_get_line(pipex->io,string,StringSize)) { // EOF string[0]='\0'; pipex->state|=PIPEX_EOF; return FALSE; } if(strncmp(PIPEX_MAGIC,string,strlen(PIPEX_MAGIC))==0){ my_fatal("%s\n",string+strlen(PIPEX_MAGIC)+1); } return TRUE; }