Changeset 1260:9d5611d31291 in roaraudio


Ignore:
Timestamp:
02/27/09 03:27:53 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

got vio cmd reader working, :)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroar/vio_cmd.c

    r1257 r1260  
    4242  return -1; 
    4343 
     44/* 
    4445 if ( flags == 0 ) 
    4546  return -1; 
     47*/ 
    4648 
    4749 if ( reader == NULL && writer == NULL ) 
     
    5052 if ( (state = malloc(sizeof(struct roar_vio_cmd_state))) == NULL ) 
    5153  return -1; 
     54 
     55 ROAR_DBG("roar_vio_open_cmd(*): pre reqs are OK"); 
    5256 
    5357 // clear all 
     
    7680 
    7781 // init calls 
    78  calls->inst = (void*) state; 
     82 calls->close    = roar_vio_cmd_close; 
     83 calls->read     = roar_vio_cmd_read; 
     84 calls->write    = roar_vio_cmd_write; 
     85 calls->nonblock = roar_vio_cmd_nonblock; 
     86 calls->sync     = roar_vio_cmd_sync; 
     87 calls->inst     = (void*) state; 
     88 
     89 ROAR_DBG("roar_vio_open_cmd(*): var setup OK"); 
    7990 
    8091 if ( !(options & ROAR_VIO_CMD_OPTS_ON_DEMAND) ) { 
     
    206217 size_t tlen = 0; 
    207218 
     219 ROAR_DBG("roar_vio_cmd_read(*) = ?"); 
     220 
    208221 if ( !state->reader.opened ) { 
    209222  if ( buf == NULL && count == 0 ) /* sync: no need to do anything if no reader is forked :) */ 
     
    230243 
    231244  FD_SET(state->reader.in,  rfhs); 
    232   FD_SET(state->reader.out, wfhs); 
     245 
     246  if ( state->reader.out != -1 ) { 
     247   FD_SET(state->reader.out, wfhs); 
     248  } 
     249 
     250#ifdef DEBUG 
     251  if ( FD_ISSET(state->reader.in, rfhs) ) { 
     252   ROAR_DBG("roar_vio_cmd_read(*): reader set in fh group"); 
     253  } 
     254#endif 
    233255 
    234256  max_fh = state->reader.in > state->reader.out ? state->reader.in : state->reader.out; 
    235  
    236   if ( (ret = select(max_fh + 1, rfhs, wfhs, rfhs, &tv)) == -1 ) 
    237    return -1; 
     257  ROAR_DBG("roar_vio_cmd_read(*): max_fh=%i", max_fh); 
     258 
     259  if ( (ret = select(max_fh + 1, rfhs, wfhs, NULL, &tv)) == -1 ) 
     260   return -1; 
     261 
     262  ROAR_DBG("roar_vio_cmd_read(*): select(*) = %i", ret); 
     263  ROAR_DBG("roar_vio_cmd_read(*): reader=%i, writer=%i", state->reader.in, state->reader.out); 
    238264 
    239265  if ( ret > 0 ) { 
    240266   if ( FD_ISSET(state->reader.in, rfhs) ) { 
     267    ROAR_DBG("roar_vio_cmd_read(*): event on reader"); 
     268 
    241269    if ( (ret = read(state->reader.in, buf+done, count-done)) == -1 ) 
    242270     break; 
     
    248276   } 
    249277 
    250    if ( FD_ISSET(state->reader.out, wfhs) ) { 
     278   if ( state->reader.out != -1 && FD_ISSET(state->reader.out, wfhs) ) { 
     279    ROAR_DBG("roar_vio_cmd_read(*): event on writer"); 
     280 
    251281    if ( !tlen ) { 
    252      tp = tbuf; 
     282     tp   = tbuf; 
     283     tlen = 0; 
    253284     if ( (tlen = roar_vio_read(state->next, tp, ROAR_VIO_CMD_BUFSIZE)) == -1 ) 
    254       tlen = 0; 
     285      continue; 
    255286    } 
    256287 
     
    260291      tp   += ret; 
    261292     } 
     293    } else { 
     294     close(state->reader.out); 
     295     state->reader.out = -1; 
    262296    } 
    263297   } 
Note: See TracChangeset for help on using the changeset viewer.