Changeset 3664:fdbfa4ac9e3b in roaraudio
- Timestamp:
- 04/04/10 12:32:30 (14 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroaross/libroaross.c
r3663 r3664 355 355 356 356 static void _close_handle(struct handle * handle) { 357 int need_close = 0; 358 357 359 if (handle == NULL) 358 360 return; … … 363 365 364 366 if ( handle->refc == 0 ) { 365 if ( handle->stream_opened ) 367 switch (handle->type) { 368 case HT_VIO: 369 need_close = 1; 370 break; 371 case HT_STREAM: 372 if ( handle->stream_opened ) 373 need_close = 1; 374 break; 375 } 376 377 if ( need_close ) 366 378 roar_vio_close(&(handle->stream_vio)); 367 379 368 handle->session->refc--; 369 370 _close_session(handle->session); 380 if ( handle->session != NULL ) { 381 handle->session->refc--; 382 383 _close_session(handle->session); 384 } 371 385 372 386 roar_mm_free(handle); … … 900 914 ROAR_DBG("write(fd=%i, buf=%p, count=%lu) = ? // pointer write", fd, buf, (long unsigned int) count); 901 915 switch (pointer->handle->type) { 902 case HT_STREAM: 916 case HT_STREAM: // handle stream specific stuff 903 917 if ( pointer->handle->stream_opened == 0 ) { 904 918 if ( _open_stream(pointer->handle) == -1 ) { … … 907 921 } 908 922 } 923 case HT_VIO: // from here we only look at the VIO object of streams, or handle simple VIOs 909 924 ret = roar_vio_write(&(pointer->handle->stream_vio), (char*)buf, count); 910 925 if ( ret > 0 ) … … 912 927 return ret; 913 928 break; 914 case HT_DMX: 929 case HT_DMX: // DMX need specal handling as we need to convert the protocol 915 930 if ( pointer->handle->stream_opened == 0 ) { 916 931 if ( _open_stream(pointer->handle) == -1 ) { … … 942 957 return count; 943 958 break; 959 default: // we don't know what to do with other types 960 errno = EINVAL; 961 return -1; 962 break; 963 } 964 } 965 966 return _os.write(fd, buf, count); 967 } 968 969 ssize_t read(int fd, void *buf, size_t count) { 970 struct pointer * pointer; 971 ssize_t ret; 972 973 _init(); 974 975 if ( (pointer = _get_pointer_by_fh(fd)) != NULL ) { 976 switch (pointer->handle->type) { 977 case HT_STREAM: 978 if ( pointer->handle->stream_opened == 0 ) { 979 if ( _open_stream(pointer->handle) == -1 ) { 980 errno = EIO; 981 return -1; 982 } 983 } 984 case HT_VIO: 985 ret = roar_vio_read(&(pointer->handle->stream_vio), buf, count); 986 if ( ret > 0 ) 987 pointer->handle->readc += ret; 988 return ret; 989 break; 944 990 default: 945 991 errno = EINVAL; … … 949 995 } 950 996 951 return _os.write(fd, buf, count);952 }953 954 ssize_t read(int fd, void *buf, size_t count) {955 struct pointer * pointer;956 ssize_t ret;957 958 _init();959 960 if ( (pointer = _get_pointer_by_fh(fd)) != NULL ) {961 if ( pointer->handle->type == HT_STREAM ) {962 if ( pointer->handle->stream_opened == 0 ) {963 if ( _open_stream(pointer->handle) == -1 ) {964 errno = EIO;965 return -1;966 }967 }968 ret = roar_vio_read(&(pointer->handle->stream_vio), buf, count);969 if ( ret > 0 )970 pointer->handle->readc += ret;971 return ret;972 } else {973 errno = EINVAL;974 return -1;975 }976 }977 978 997 return _os.read(fd, buf, count); 979 998 } … … 985 1004 986 1005 if ( (pointer = _get_pointer_by_fh(fildes)) != NULL ) { 987 if ( pointer->handle->type == HT_DMX ) { 988 switch (whence) { 989 case SEEK_SET: 990 pointer->handle->pos = offset; 991 break; 992 case SEEK_CUR: 993 pointer->handle->pos += offset; 994 break; 995 case SEEK_END: 996 default: 997 errno = EINVAL; 998 return -1; 999 break; 1000 } 1001 return pointer->handle->pos; 1002 } else { 1003 errno = EINVAL; 1004 return -1; 1006 switch (pointer->handle->type) { 1007 case HT_DMX: 1008 switch (whence) { 1009 case SEEK_SET: 1010 pointer->handle->pos = offset; 1011 break; 1012 case SEEK_CUR: 1013 pointer->handle->pos += offset; 1014 break; 1015 case SEEK_END: 1016 default: 1017 errno = EINVAL; 1018 return -1; 1019 break; 1020 } 1021 return pointer->handle->pos; 1022 break; 1023 case HT_VIO: 1024 return roar_vio_lseek(&(pointer->handle->stream_vio), offset, whence); 1025 break; 1026 default: 1027 errno = EINVAL; 1028 return -1; 1029 break; 1005 1030 } 1006 1031 }
Note: See TracChangeset
for help on using the changeset viewer.