Changeset 1327:f5806588a4fa in roaraudio


Ignore:
Timestamp:
03/22/09 23:43:26 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

implemnted the vio_stack

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • include/libroar/vio_stack.h

    r1326 r1327  
    3838#include "libroar.h" 
    3939 
     40#define ROAR_VIO_STACK_MAX 32 
     41 
     42struct roar_vio_stack { 
     43 int next; 
     44 
     45 struct roar_vio_calls * cur; 
     46 
     47 struct roar_vio_calls * calls[ROAR_VIO_STACK_MAX]; 
     48}; 
     49 
    4050int     roar_vio_open_stack    (struct roar_vio_calls * calls); 
     51int     roar_vio_stack_add     (struct roar_vio_calls * calls, struct roar_vio_calls * vio); 
    4152 
    42 #ifdef ROAR_HAVE_LIBSSL 
    4353ssize_t roar_vio_stack_read    (struct roar_vio_calls * vio, void *buf, size_t count); 
    4454ssize_t roar_vio_stack_write   (struct roar_vio_calls * vio, void *buf, size_t count); 
     
    4757int     roar_vio_stack_sync    (struct roar_vio_calls * vio); 
    4858int     roar_vio_stack_close   (struct roar_vio_calls * vio); 
    49 #endif 
    5059 
    5160#endif 
  • libroar/vio_stack.c

    r1326 r1327  
    3535#include "libroar.h" 
    3636 
     37int     roar_vio_open_stack    (struct roar_vio_calls * calls) { 
     38 struct roar_vio_stack * self; 
     39 
     40 if ( calls == NULL ) 
     41  return -1; 
     42 
     43 if ( (self = malloc(sizeof(struct roar_vio_stack))) == NULL ) 
     44  return -1; 
     45 
     46 memset(self,  0, sizeof(struct roar_vio_stack)); 
     47 memset(calls, 0, sizeof(struct roar_vio_calls)); 
     48 
     49 calls->inst     = self; 
     50 calls->close    = roar_vio_stack_close; 
     51 calls->read     = roar_vio_stack_read; 
     52 calls->write    = roar_vio_stack_write; 
     53 calls->lseek    = roar_vio_stack_lseek; 
     54 calls->nonblock = roar_vio_stack_nonblock; 
     55 calls->sync     = roar_vio_stack_sync; 
     56 
     57 return 0; 
     58} 
     59 
     60int     roar_vio_stack_add     (struct roar_vio_calls * calls, struct roar_vio_calls * vio) { 
     61 struct roar_vio_stack * self; 
     62 
     63 if ( calls == NULL || vio == NULL ) 
     64  return -1; 
     65 
     66 if ( (self = calls->inst) == NULL ) 
     67  return -1; 
     68 
     69 if ( self->next == ROAR_VIO_STACK_MAX ) 
     70  return -1; 
     71 
     72 self->cur = self->calls[self->next++] = vio; 
     73 
     74 return 0; 
     75} 
     76 
     77int     roar_vio_stack_close   (struct roar_vio_calls * vio) { 
     78 struct roar_vio_stack * self; 
     79 int i; 
     80 
     81 if ( vio == NULL ) 
     82  return -1; 
     83 
     84 if ( (self = vio->inst) == NULL ) 
     85  return -1; 
     86 
     87 if ( self->cur != NULL ) { 
     88  if ( roar_vio_close(self->cur) == -1 ) 
     89   return -1; 
     90 
     91  for (i = 0; i < self->next; i++) 
     92   free(self->calls[i]); 
     93 } 
     94 
     95 free(self); 
     96 
     97 return 0; 
     98} 
     99 
     100ssize_t roar_vio_stack_read    (struct roar_vio_calls * vio, void *buf, size_t count) { 
     101 if ( vio == NULL ) 
     102  return -1; 
     103 
     104 if ( vio->inst == NULL ) 
     105  return -1; 
     106 
     107 if ( ((struct roar_vio_stack*)(vio->inst))->cur == NULL ) 
     108  return -1; 
     109 
     110 return roar_vio_read(((struct roar_vio_stack*)(vio->inst))->cur, buf, count); 
     111} 
     112 
     113ssize_t roar_vio_stack_write   (struct roar_vio_calls * vio, void *buf, size_t count) { 
     114 if ( vio == NULL ) 
     115  return -1; 
     116 
     117 if ( vio->inst == NULL ) 
     118  return -1; 
     119 
     120 if ( ((struct roar_vio_stack*)(vio->inst))->cur == NULL ) 
     121  return -1; 
     122 
     123 return roar_vio_write(((struct roar_vio_stack*)(vio->inst))->cur, buf, count); 
     124} 
     125 
     126off_t   roar_vio_stack_lseek   (struct roar_vio_calls * vio, off_t offset, int whence) { 
     127 if ( vio == NULL ) 
     128  return -1; 
     129 
     130 if ( vio->inst == NULL ) 
     131  return -1; 
     132 
     133 if ( ((struct roar_vio_stack*)(vio->inst))->cur == NULL ) 
     134  return -1; 
     135 
     136 return roar_vio_lseek(((struct roar_vio_stack*)(vio->inst))->cur, offset, whence); 
     137} 
     138 
     139int     roar_vio_stack_nonblock(struct roar_vio_calls * vio, int state) { 
     140 if ( vio == NULL ) 
     141  return -1; 
     142 
     143 if ( vio->inst == NULL ) 
     144  return -1; 
     145 
     146 if ( ((struct roar_vio_stack*)(vio->inst))->cur == NULL ) 
     147  return -1; 
     148 
     149 return roar_vio_nonblock(((struct roar_vio_stack*)(vio->inst))->cur, state); 
     150} 
     151 
     152int     roar_vio_stack_sync    (struct roar_vio_calls * vio) { 
     153 if ( vio == NULL ) 
     154  return -1; 
     155 
     156 if ( vio->inst == NULL ) 
     157  return -1; 
     158 
     159 if ( ((struct roar_vio_stack*)(vio->inst))->cur == NULL ) 
     160  return -1; 
     161 
     162 return roar_vio_sync(((struct roar_vio_stack*)(vio->inst))->cur); 
     163} 
     164 
    37165//ll 
Note: See TracChangeset for help on using the changeset viewer.