home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_09_01 / 9n01106a < prev    next >
Text File  |  1990-10-04  |  2KB  |  50 lines

  1.  
  2.         buf[0] = '\0';
  3.  
  4.         for (;;) {
  5.                 if (rc == buf_size) {
  6.                         memcpy(buf,buf+buf_size/2,buf_size/2);
  7.                         rc = buf_size/2;
  8.                 }
  9.  
  10.                 cc = i_read(stream,buf+rc,buf_size-rc,timeout);
  11.  
  12.                 if (cc == 0) {          /* normal EOF */
  13.                         eof = TRUE;
  14.                         fclose(stream);
  15.                         break;
  16.                 } else if (cc == -1) {  /* abnormal EOF */
  17.                         if (i_read_errno == EBADF) {
  18.                                 tcl_error("bad spawn_id (process died earlier?)");
  19.                         } else {
  20.                                 tcl_error("i_read(spawn_id=%d): %s",
  21.                                         stream,sys_errlist[errno]);
  22.                                 fclose(stream);
  23.                         }
  24.                         error = TRUE;
  25.                         break;
  26.                 } else if (cc == -2) break; /* timed out */
  27.  
  28.                 oldrc = rc;
  29.                 rc += cc;
  30.  
  31.                 if (loguser) {
  32.                         fwrite(buf+oldrc,1,cc,stdout);
  33.                         fflush(stdout);
  34.                 }
  35.  
  36.                 rc -= rm_nulls(&buf[oldrc],cc);
  37.                 buf[rc] = '\0';
  38.  
  39.                 for (p=pairs;p<&pairs[pairs_inuse];p++) {
  40.                         if (p->type == keyword) continue;
  41.                         if (patternmatch(buf,p->pattern)) {
  42.                                 match = TRUE;
  43.                                 goto done;
  44.                         }
  45.                 }
  46.         }
  47.  
  48.         Listing 8
  49.  
  50.