Changeset 3870:a1987a5a6824 in roaraudio for libroaross/libroaross.c
- Timestamp:
- 05/20/10 19:44:48 (14 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroaross/libroaross.c
r3868 r3870 215 215 size_t len; 216 216 void * userdata; 217 struct handle * (*open)(const char * file, int flags, mode_t mode, struct devices * ptr); 217 218 } _device_list[] = { 218 {"/dev/dsp ", HT_WAVEFORM, 0, NULL},219 {"/dev/audio ", HT_WAVEFORM, 0, NULL},220 {"/dev/sound/dsp ", HT_WAVEFORM, 0, NULL},221 {"/dev/sound/audio ", HT_WAVEFORM, 0, NULL},222 {"/dev/mixer ", HT_MIXER, 0, NULL},223 {"/dev/sound/mixer ", HT_MIXER, 0, NULL},224 {"/dev/midi ", HT_MIDI, 0, NULL},225 {"/dev/rmidi ", HT_MIDI, 0, NULL},226 {"/dev/sound/midi ", HT_MIDI, 0, NULL},227 {"/dev/sound/rmidi ", HT_MIDI, 0, NULL},228 {"/dev/dmx ", HT_DMX, 0, NULL},229 {"/dev/misc/dmx ", HT_DMX, 0, NULL},230 {"/dev/dmxin ", HT_DMX, 0, NULL},231 {"/dev/misc/dmxin ", HT_DMX, 0, NULL},232 {"/dev/sndstat", HT_STATIC, sizeof(_sf__dev_sndstat)-1, _sf__dev_sndstat },219 {"/dev/dsp*", HT_WAVEFORM, 0, NULL, NULL}, 220 {"/dev/audio*", HT_WAVEFORM, 0, NULL, NULL}, 221 {"/dev/sound/dsp*", HT_WAVEFORM, 0, NULL, NULL}, 222 {"/dev/sound/audio*", HT_WAVEFORM, 0, NULL, NULL}, 223 {"/dev/mixer*", HT_MIXER, 0, NULL, NULL}, 224 {"/dev/sound/mixer*", HT_MIXER, 0, NULL, NULL}, 225 {"/dev/midi*", HT_MIDI, 0, NULL, NULL}, 226 {"/dev/rmidi*", HT_MIDI, 0, NULL, NULL}, 227 {"/dev/sound/midi*", HT_MIDI, 0, NULL, NULL}, 228 {"/dev/sound/rmidi*", HT_MIDI, 0, NULL, NULL}, 229 {"/dev/dmx*", HT_DMX, 0, NULL, NULL}, 230 {"/dev/misc/dmx*", HT_DMX, 0, NULL, NULL}, 231 {"/dev/dmxin*", HT_DMX, 0, NULL, NULL}, 232 {"/dev/misc/dmxin*", HT_DMX, 0, NULL, NULL}, 233 {"/dev/sndstat", HT_STATIC, sizeof(_sf__dev_sndstat)-1, _sf__dev_sndstat, NULL}, 233 234 #ifdef ROAR_DEFAULT_OSS_DEV 234 {ROAR_DEFAULT_OSS_DEV, HT_WAVEFORM, 0, NULL },235 #endif 236 {NULL, HT_NONE, 0, NULL },235 {ROAR_DEFAULT_OSS_DEV, HT_WAVEFORM, 0, NULL, NULL}, 236 #endif 237 {NULL, HT_NONE, 0, NULL, NULL}, 237 238 }; 238 239 … … 496 497 497 498 // ------------------------------------- 499 // central function to find device: 500 // ------------------------------------- 501 502 static struct devices * _get_device (const char * pathname) { 503 struct devices * ptr; 504 size_t len; 505 int i; 506 507 for (i = 0; _device_list[i].prefix != NULL; i++) { 508 len = strlen(_device_list[i].prefix); 509 510 if ( _device_list[i].prefix[len-1] == '*' ) { 511 len--; 512 } else { 513 len++; 514 } 515 if ( !strncmp(pathname, _device_list[i].prefix, len) ) { 516 ptr = &(_device_list[i]); 517 } 518 } 519 520 return NULL; 521 } 522 523 // ------------------------------------- 498 524 // central open function: 499 525 // ------------------------------------- … … 504 530 struct pointer * pointer; 505 531 struct devices * ptr = NULL; 506 int i;507 532 508 533 ROAR_DBG("_open_file(pathname='%s', flags=0x%x) = ?", pathname, flags); … … 525 550 } 526 551 527 for (i = 0; _device_list[i].prefix != NULL; i++) { 528 if ( !strcmp(pathname, _device_list[i].prefix) ) { 529 ptr = &(_device_list[i]); 530 } 531 } 532 533 if ( ptr == NULL ) 552 if ( (ptr = _get_device(pathname)) == NULL ) 534 553 return -2; 535 554 … … 543 562 } 544 563 545 if ( (handle = _open_handle(session)) == NULL ) { 546 _close_session(session); 547 ROAR_DBG("_open_file(pathname='%s', flags=0x%x) = -1", pathname, flags); 548 return -1; 549 } 550 551 handle->type = ptr->type; 552 handle->sysio_flags = flags; 553 handle->stream_dir = -1; 564 if ( ptr->open != NULL ) { 565 // TODO: Add support to pass mode (perms) to open. 566 if ( (handle = ptr->open(pathname, flags, 0000, ptr)) == NULL ) { 567 _close_session(session); 568 ROAR_DBG("_open_file(pathname='%s', flags=0x%x) = -1", pathname, flags); 569 return -1; 570 } 571 } else { 572 if ( (handle = _open_handle(session)) == NULL ) { 573 _close_session(session); 574 ROAR_DBG("_open_file(pathname='%s', flags=0x%x) = -1", pathname, flags); 575 return -1; 576 } 577 578 handle->type = ptr->type; 579 handle->sysio_flags = flags; 580 handle->stream_dir = -1; 581 } 554 582 555 583 switch (flags & _O_PARA_DIR) { … … 1780 1808 int access(const char *pathname, int mode) { 1781 1809 struct devices * ptr = NULL; 1782 int i;1783 1810 1784 1811 _init(); 1785 1812 1786 for (i = 0; _device_list[i].prefix != NULL; i++) { 1787 if ( !strcmp(pathname, _device_list[i].prefix) ) { 1788 ptr = &(_device_list[i]); 1789 } 1790 } 1791 1792 if ( ptr != NULL ) { 1813 if ( (ptr = _get_device(pathname)) != NULL ) { 1793 1814 // the only flag we do not support is +x, which means 1794 1815 // we need to reject all requets with X_OK.
Note: See TracChangeset
for help on using the changeset viewer.