Changeset 1505:06a3687a4ce8 in roaraudio


Ignore:
Timestamp:
04/01/09 17:55:36 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

added more support for vio_ctl, added ROAR_VIO_CTL_GET_*FH and ROAR_VIO_CTL_SELECT

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • include/libroar/vio.h

    r1351 r1505  
    4949 *   0x1XXX -> Server  
    5050 */ 
     51 
     52// basic calls: 
     53#define ROAR_VIO_CTL_GET_NEXT          0x0101 
     54#define ROAR_VIO_CTL_SET_NEXT          0x0102 
     55#define ROAR_VIO_CTL_GET_FH            0x0110 
     56#define ROAR_VIO_CTL_GET_READ_FH       0x0111 
     57#define ROAR_VIO_CTL_GET_WRITE_FH      0x0112 
     58#define ROAR_VIO_CTL_SELECT            0x0120 
     59 
    5160// stream: 
    5261#define ROAR_VIO_CTL_SET_STREAM    0x00010001 /* normal streams */ 
     
    140149int     roar_vio_basic_nonblock(struct roar_vio_calls * vio, int state); 
    141150int     roar_vio_basic_sync    (struct roar_vio_calls * vio); 
     151int     roar_vio_basic_ctl     (struct roar_vio_calls * vio, int cmd, void * data); 
    142152int     roar_vio_basic_close   (struct roar_vio_calls * vio); 
    143153 
     
    169179off_t   roar_vio_stdio_lseek   (struct roar_vio_calls * vio, off_t offset, int whence); 
    170180int     roar_vio_stdio_sync    (struct roar_vio_calls * vio); 
     181int     roar_vio_stdio_ctl     (struct roar_vio_calls * vio, int cmd, void * data); 
    171182int     roar_vio_stdio_close   (struct roar_vio_calls * vio); 
    172183 
  • include/libroar/vio_pipe.h

    r1310 r1505  
    6868int     roar_vio_pipe_nonblock(struct roar_vio_calls * vio, int state); 
    6969int     roar_vio_pipe_sync    (struct roar_vio_calls * vio); 
     70int     roar_vio_pipe_ctl     (struct roar_vio_calls * vio, int cmd, void * data); 
    7071int     roar_vio_pipe_close   (struct roar_vio_calls * vio); 
    7172 
  • include/libroar/vio_stack.h

    r1327 r1505  
    5656int     roar_vio_stack_nonblock(struct roar_vio_calls * vio, int state); 
    5757int     roar_vio_stack_sync    (struct roar_vio_calls * vio); 
     58int     roar_vio_stack_ctl     (struct roar_vio_calls * vio, int cmd, void * data); 
    5859int     roar_vio_stack_close   (struct roar_vio_calls * vio); 
    5960 
  • libroar/vio.c

    r1474 r1505  
    5757 calls->nonblock = roar_vio_basic_nonblock; 
    5858 calls->sync     = roar_vio_basic_sync; 
     59 calls->ctl      = roar_vio_basic_ctl; 
    5960 calls->close    = roar_vio_basic_close; 
    6061 
     
    380381 return 0; 
    381382#endif 
     383} 
     384 
     385int     roar_vio_basic_ctl     (struct roar_vio_calls * vio, int cmd, void * data) { 
     386 
     387 if ( vio == NULL || cmd == -1 ) 
     388  return -1; 
     389 
     390 switch (cmd) { 
     391  case ROAR_VIO_CTL_GET_FH: 
     392  case ROAR_VIO_CTL_GET_READ_FH: 
     393  case ROAR_VIO_CTL_GET_WRITE_FH: 
     394    *(int*)data = roar_vio_get_fh(vio); 
     395    return 0; 
     396   break; 
     397 } 
     398 
     399 return -1; 
    382400} 
    383401 
     
    441459 
    442460int     roar_vio_pass_ctl     (struct roar_vio_calls * vio, int cmd, void * data) { 
     461 if (vio == NULL || cmd == -1) 
     462  return -1; 
     463 
     464 switch (cmd) { 
     465  case ROAR_VIO_CTL_GET_NEXT: 
     466    *(struct roar_vio_calls **)data = vio->inst; 
     467    return 0; 
     468   break; 
     469  case ROAR_VIO_CTL_SET_NEXT: 
     470    vio->inst = *(struct roar_vio_calls **)data; 
     471    return 0; 
     472   break; 
     473 } 
     474 
    443475 return roar_vio_ctl((struct roar_vio_calls *) vio->inst, cmd, data); 
    444476} 
     
    538570} 
    539571 
     572int     roar_vio_stdio_ctl     (struct roar_vio_calls * vio, int cmd, void * data) { 
     573 
     574 if ( vio == NULL || cmd == -1 ) 
     575  return -1; 
     576 
     577 switch (cmd) { 
     578  case ROAR_VIO_CTL_GET_FH: 
     579  case ROAR_VIO_CTL_GET_READ_FH: 
     580  case ROAR_VIO_CTL_GET_WRITE_FH: 
     581   *(int*)data = fileno((FILE*)(vio->inst)); 
     582    return 0; 
     583   break; 
     584 } 
     585 
     586 return -1; 
     587} 
     588 
    540589int     roar_vio_stdio_close   (struct roar_vio_calls * vio) { 
    541590 return fclose((FILE*)(vio->inst)); 
  • libroar/vio_pipe.c

    r1470 r1505  
    211211} 
    212212 
     213int     roar_vio_pipe_ctl     (struct roar_vio_calls * vio, int cmd, void * data) { 
     214 struct roar_vio_pipe * self; 
     215 
     216 if (vio == NULL || cmd == -1) 
     217  return -1; 
     218 
     219 if ( (self = (struct roar_vio_pipe *)vio->inst) == NULL ) 
     220  return -1; 
     221 
     222 switch (cmd) { 
     223  case ROAR_VIO_CTL_GET_FH: 
     224    if ( self->type == ROAR_VIO_PIPE_TYPE_SOCKET ) { 
     225     *(int*)data = self->b.p[ROAR_VIO_PIPE_S(self,vio)]; 
     226     return 0; 
     227    } else { 
     228     return -1; 
     229    } 
     230   break; 
     231  case ROAR_VIO_CTL_GET_READ_FH: 
     232    switch (self->type) { 
     233     case ROAR_VIO_PIPE_TYPE_SOCKET: 
     234       *(int*)data = self->b.p[ROAR_VIO_PIPE_S(self,vio)]; 
     235       return 0; 
     236      break; 
     237     case ROAR_VIO_PIPE_TYPE_PIPE: 
     238       *(int*)data = self->b.p[ROAR_VIO_PIPE_S(self,vio)*2]; 
     239       return 0; 
     240      break; 
     241    } 
     242  case ROAR_VIO_CTL_GET_WRITE_FH: 
     243    switch (self->type) { 
     244     case ROAR_VIO_PIPE_TYPE_SOCKET: 
     245       *(int*)data = self->b.p[ROAR_VIO_PIPE_S(self,vio)]; 
     246       return 0; 
     247      break; 
     248     case ROAR_VIO_PIPE_TYPE_PIPE: 
     249       *(int*)data = self->b.p[(ROAR_VIO_PIPE_SR(self,vio)*2)+1]; 
     250       return 0; 
     251      break; 
     252    } 
     253   break; 
     254 } 
     255 
     256 return -1; 
     257} 
     258 
     259 
    213260ssize_t roar_vio_pipe_read    (struct roar_vio_calls * vio, void *buf, size_t count) { 
    214261 struct roar_vio_pipe * self; 
  • libroar/vio_stack.c

    r1327 r1505  
    4949 calls->inst     = self; 
    5050 calls->close    = roar_vio_stack_close; 
     51 calls->ctl      = roar_vio_stack_ctl; 
    5152 calls->read     = roar_vio_stack_read; 
    5253 calls->write    = roar_vio_stack_write; 
     
    9798 return 0; 
    9899} 
     100 
     101int     roar_vio_stack_ctl     (struct roar_vio_calls * vio, int cmd, void * data) { 
     102 if (vio == NULL || cmd == -1) 
     103  return -1; 
     104 
     105 switch (cmd) { 
     106  case ROAR_VIO_CTL_GET_FH: 
     107  case ROAR_VIO_CTL_GET_READ_FH: 
     108  case ROAR_VIO_CTL_GET_WRITE_FH: 
     109  case ROAR_VIO_CTL_SELECT: 
     110    return roar_vio_ctl(((struct roar_vio_stack*)(vio->inst))->cur, cmd, data); 
     111   break; 
     112 } 
     113 
     114 return -1; 
     115} 
     116 
    99117 
    100118ssize_t roar_vio_stack_read    (struct roar_vio_calls * vio, void *buf, size_t count) { 
Note: See TracChangeset for help on using the changeset viewer.