home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / CMDS / mtools_3.6.src.lzh / MTOOLS_3.6 / stream.c < prev    next >
C/C++ Source or Header  |  1997-11-12  |  1KB  |  63 lines

  1. #include "sysincludes.h"
  2. #include "msdos.h"
  3. #include "stream.h"
  4.  
  5. int flush_stream(Stream_t *Stream)
  6. {
  7.     int ret=0;
  8.  
  9.     if(Stream->Class->flush)
  10.         ret |= Stream->Class->flush(Stream);
  11.     if(Stream->Next)
  12.         ret |= flush_stream(Stream->Next);
  13.     return ret;
  14. }
  15.  
  16. Stream_t *copy_stream(Stream_t *Stream)
  17. {
  18.     if(Stream)
  19.         Stream->refs++;
  20.     return Stream;
  21. }
  22.  
  23. int free_stream(Stream_t **Stream)
  24. {
  25.     int ret=0;
  26.  
  27.     if(!*Stream)
  28.         return -1;
  29.     if((*Stream)->Class->flush)
  30.         ret |= (*Stream)->Class->flush(*Stream);
  31.     if(! --(*Stream)->refs){
  32.         if((*Stream)->Class->free)
  33.             ret |= (*Stream)->Class->free(*Stream);
  34.         if((*Stream)->Next)
  35.             ret |= free_stream(&(*Stream)->Next);
  36.         Free(*Stream);
  37.     } else if ( (*Stream)->Next )
  38.         ret |= flush_stream((*Stream)->Next);        
  39.     *Stream = NULL;
  40.     return ret;
  41. }
  42.  
  43.  
  44. #define GET_DATA(stream, date, size, type, address) \
  45. (stream)->Class->get_data( (stream), (date), (size), (type), (address) )
  46.  
  47.  
  48. int get_data_pass_through(Stream_t *Stream, long *date, size_t *size,
  49.               int *type, int *address)
  50. {
  51.        return GET_DATA(Stream->Next, date, size, type, address);
  52. }
  53.  
  54. int read_pass_through(Stream_t *Stream, char *buf, off_t start, size_t len)
  55. {
  56.     return READS(Stream->Next, buf, start, len);
  57. }
  58.  
  59. int write_pass_through(Stream_t *Stream, char *buf, off_t start, size_t len)
  60. {
  61.     return WRITES(Stream->Next, buf, start, len);
  62. }
  63.