added simple xml parser
[swftools.git] / lib / bitio.c
index bd54935..17d9293 100644 (file)
@@ -29,6 +29,7 @@
 #include <string.h>
 #include <memory.h>
 #include <fcntl.h>
+#include <errno.h>
 
 #include "../config.h"
 
@@ -68,15 +69,33 @@ static int reader_fileread(reader_t*reader, void* data, int len)
        reader->pos += ret;
     return ret;
 }
+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)
 {
     r->read = reader_fileread;
+    r->dealloc = reader_fileread_dealloc;
     r->internal = (void*)handle;
     r->type = READER_TYPE_FILE;
     r->mybyte = 0;
     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 ------------------------------- */
 
@@ -288,7 +307,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
@@ -338,7 +357,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