X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fbitio.c;h=bf210009aae531da8a818c75872334646954228f;hb=c10fb05b68fa1c717ef7d62d84bfb29008d41c33;hp=c8f1d7db0237a9a972c63fe4d77d0dee49c7e696;hpb=fc815311aa1bd67877b404493838dfd85a86f596;p=swftools.git diff --git a/lib/bitio.c b/lib/bitio.c index c8f1d7d..bf21000 100644 --- a/lib/bitio.c +++ b/lib/bitio.c @@ -29,6 +29,7 @@ #include #include #include +#include #include "../config.h" @@ -70,6 +71,9 @@ static int reader_fileread(reader_t*reader, void* data, int len) } static void reader_fileread_dealloc(reader_t*r) { + if(r->type == READER_TYPE_FILE2) { + close((ptroff_t)r->internal); + } memset(r, 0, sizeof(reader_t)); } void reader_init_filereader(reader_t*r, int handle) @@ -82,6 +86,16 @@ void reader_init_filereader(reader_t*r, int handle) r->bitpos = 8; r->pos = 0; } +void reader_init_filereader2(reader_t*r, const char*filename) +{ + int fi = open(filename, +#ifdef O_BINARY + O_BINARY| +#endif + O_RDONLY); + reader_init_filereader(r, fi); + r->type = READER_TYPE_FILE2; +} /* ---------------------------- mem reader ------------------------------- */ @@ -122,6 +136,28 @@ void reader_init_memreader(reader_t*r, void*newdata, int newlength) r->pos = 0; } +/* ---------------------------- zzip reader ------------------------------ */ +#ifdef HAVE_ZZIP +static int reader_zzip_read(reader_t*reader, void* data, int len) +{ + return zzip_file_read((ZZIP_FILE*)reader->internal, data, len); +} +static void reader_zzip_dealloc(reader_t*reader) +{ + memset(reader, 0, sizeof(reader_t)); +} +void reader_init_zzipreader(reader_t*r,ZZIP_FILE*z) +{ + r->read = reader_zzip_read; + r->dealloc = reader_zzip_dealloc; + r->internal = z; + r->type = READER_TYPE_ZZIP; + r->mybyte = 0; + r->bitpos = 8; + r->pos = 0; +} +#endif + /* ---------------------------- mem writer ------------------------------- */ typedef struct _memwrite @@ -293,7 +329,7 @@ void writer_init_filewriter(writer_t*w, int handle) } void writer_init_filewriter2(writer_t*w, char*filename) { - int fi = open("movie.swf", + int fi = open(filename, #ifdef O_BINARY O_BINARY| #endif @@ -343,7 +379,7 @@ static void zlib_error(int ret, char* msg, z_stream*zs) msg, ret, zs->msg?zs->msg:"unknown"); - perror("errno:"); + if(errno) perror("errno:"); exit(1); } #endif