Changeset 1301:0449abcdfbf6 in roaraudio
- Timestamp:
- 03/19/09 03:57:00 (15 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
include/libroar/vio_pipe.h
r1300 r1301 45 45 46 46 struct roar_vio_pipe { 47 int refcount; 47 48 int type; 48 49 int flags; 49 50 union { 50 struct roar_buffer b[2];51 int p[4];51 struct roar_buffer * b[2]; 52 int p[4]; 52 53 } b; 53 54 }; -
libroar/vio_pipe.c
r1300 r1301 35 35 #include "libroar.h" 36 36 37 int roar_vio_open_pipe (struct roar_vio_calls * s1, struct roar_vio_calls * s2, int type, int flags) { 38 struct roar_vio_pipe * self; 39 int rw = flags & (O_RDONLY|O_WRONLY|O_RDWR); 40 41 if ( s1 == NULL || s2 == NULL ) 42 return -1; 43 44 if ( (self = malloc(sizeof(struct roar_vio_pipe))) == NULL ) 45 return -1; 46 47 memset(self, 0, sizeof(struct roar_vio_pipe)); 48 49 self->refcount = 2; 50 self->type = type; 51 self->flags = flags; 52 53 if ( type == ROAR_VIO_PIPE_TYPE_AUTO ) { 54 #ifdef ROAR_TARGET_WIN32 55 type = ROAR_VIO_PIPE_TYPE_BUFFER; 56 #else 57 type = ROAR_VIO_PIPE_TYPE_SOCKET; 58 #endif 59 } 60 61 switch (type) { 62 case ROAR_VIO_PIPE_TYPE_BUFFER: 63 // no buffers need to be set up here, 64 // we handle the NULL pointer in the reader and writer func 65 break; 66 case ROAR_VIO_PIPE_TYPE_PIPE: 67 if ( rw == O_RDWR || rw == O_RDONLY ) 68 if ( pipe(self->b.p) == -1 ) { 69 free(self); 70 return -1; 71 } 72 if ( rw == O_RDWR || rw == O_WRONLY ) 73 if ( pipe((self->b.p) + 2) == -1 ) { 74 close(self->b.p[0]); 75 close(self->b.p[1]); 76 free(self); 77 return -1; 78 } 79 break; 80 case ROAR_VIO_PIPE_TYPE_SOCKET: 81 if ( socketpair(AF_UNIX, SOCK_STREAM, 0, self->b.p) == -1 ) { 82 free(self); 83 return -1; 84 } 85 86 if ( rw == O_RDONLY ) { 87 shutdown(self->b.p[0], SHUT_WR); 88 shutdown(self->b.p[1], SHUT_RD); 89 } else if ( rw == O_WRONLY ) { 90 shutdown(self->b.p[0], SHUT_RD); 91 shutdown(self->b.p[1], SHUT_WR); 92 } 93 break; 94 default: 95 free(self); 96 return -1; 97 } 98 99 return 0; 100 } 101 37 102 //ll
Note: See TracChangeset
for help on using the changeset viewer.