Changeset 1505:06a3687a4ce8 in roaraudio
- Timestamp:
- 04/01/09 17:55:36 (15 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
include/libroar/vio.h
r1351 r1505 49 49 * 0x1XXX -> Server 50 50 */ 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 51 60 // stream: 52 61 #define ROAR_VIO_CTL_SET_STREAM 0x00010001 /* normal streams */ … … 140 149 int roar_vio_basic_nonblock(struct roar_vio_calls * vio, int state); 141 150 int roar_vio_basic_sync (struct roar_vio_calls * vio); 151 int roar_vio_basic_ctl (struct roar_vio_calls * vio, int cmd, void * data); 142 152 int roar_vio_basic_close (struct roar_vio_calls * vio); 143 153 … … 169 179 off_t roar_vio_stdio_lseek (struct roar_vio_calls * vio, off_t offset, int whence); 170 180 int roar_vio_stdio_sync (struct roar_vio_calls * vio); 181 int roar_vio_stdio_ctl (struct roar_vio_calls * vio, int cmd, void * data); 171 182 int roar_vio_stdio_close (struct roar_vio_calls * vio); 172 183 -
include/libroar/vio_pipe.h
r1310 r1505 68 68 int roar_vio_pipe_nonblock(struct roar_vio_calls * vio, int state); 69 69 int roar_vio_pipe_sync (struct roar_vio_calls * vio); 70 int roar_vio_pipe_ctl (struct roar_vio_calls * vio, int cmd, void * data); 70 71 int roar_vio_pipe_close (struct roar_vio_calls * vio); 71 72 -
include/libroar/vio_stack.h
r1327 r1505 56 56 int roar_vio_stack_nonblock(struct roar_vio_calls * vio, int state); 57 57 int roar_vio_stack_sync (struct roar_vio_calls * vio); 58 int roar_vio_stack_ctl (struct roar_vio_calls * vio, int cmd, void * data); 58 59 int roar_vio_stack_close (struct roar_vio_calls * vio); 59 60 -
libroar/vio.c
r1474 r1505 57 57 calls->nonblock = roar_vio_basic_nonblock; 58 58 calls->sync = roar_vio_basic_sync; 59 calls->ctl = roar_vio_basic_ctl; 59 60 calls->close = roar_vio_basic_close; 60 61 … … 380 381 return 0; 381 382 #endif 383 } 384 385 int 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; 382 400 } 383 401 … … 441 459 442 460 int 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 443 475 return roar_vio_ctl((struct roar_vio_calls *) vio->inst, cmd, data); 444 476 } … … 538 570 } 539 571 572 int 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 540 589 int roar_vio_stdio_close (struct roar_vio_calls * vio) { 541 590 return fclose((FILE*)(vio->inst)); -
libroar/vio_pipe.c
r1470 r1505 211 211 } 212 212 213 int 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 213 260 ssize_t roar_vio_pipe_read (struct roar_vio_calls * vio, void *buf, size_t count) { 214 261 struct roar_vio_pipe * self; -
libroar/vio_stack.c
r1327 r1505 49 49 calls->inst = self; 50 50 calls->close = roar_vio_stack_close; 51 calls->ctl = roar_vio_stack_ctl; 51 52 calls->read = roar_vio_stack_read; 52 53 calls->write = roar_vio_stack_write; … … 97 98 return 0; 98 99 } 100 101 int 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 99 117 100 118 ssize_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.