#endif
#include <string.h>
#include <memory.h>
+#define __USE_LARGEFILE64
#include <fcntl.h>
+#include <errno.h>
#include "../config.h"
{
memset(r, 0, sizeof(reader_t));
}
+static int reader_nullseek(reader_t*r, int pos)
+{
+ return pos;
+}
void reader_init_nullreader(reader_t*r)
{
r->read = reader_nullread;
+ r->seek = reader_nullseek;
r->dealloc = reader_nullread_dealloc;
r->internal = 0;
r->type = READER_TYPE_NULL;
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));
+}
+static int reader_fileread_seek(reader_t*r, int pos)
+{
+ return lseek((ptroff_t)r->internal, pos, SEEK_SET);
+}
void reader_init_filereader(reader_t*r, int handle)
{
r->read = reader_fileread;
+ r->seek = reader_fileread_seek;
+ 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)
+{
+#ifdef HAVE_OPEN64
+ int fi = open64
+#else
+ int fi = open
+#endif
+ (filename,
+#ifdef O_BINARY
+ O_BINARY|
+#endif
+ O_RDONLY);
+ reader_init_filereader(r, fi);
+ r->type = READER_TYPE_FILE2;
+}
/* ---------------------------- mem reader ------------------------------- */
if(mr->length - reader->pos < len) {
len = mr->length - reader->pos;
}
+ if(!len) return 0;
memcpy(data, &mr->data[reader->pos], len);
reader->pos += len;
return len;
}
+static int reader_memseek(reader_t*reader, int pos)
+{
+ memread_t*mr = (memread_t*)reader->internal;
+ if(pos>=0 && pos<=mr->length) {
+ reader->pos = pos;
+ return pos;
+ } else {
+ return -1;
+ }
+}
static void reader_memread_dealloc(reader_t*reader)
{
if(reader->internal)
mr->data = (unsigned char*)newdata;
mr->length = newlength;
r->read = reader_memread;
+ r->seek = reader_memseek;
r->dealloc = reader_memread_dealloc;
r->internal = (void*)mr;
r->type = READER_TYPE_MEM;
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));
+}
+static int reader_zzip_seek(reader_t*reader, int pos)
+{
+ return zzip_seek((ZZIP_FILE*)reader->internal, pos, SEEK_SET);
+}
+void reader_init_zzipreader(reader_t*r,ZZIP_FILE*z)
+{
+ r->read = reader_zzip_read;
+ r->seek = reader_zzip_seek;
+ 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
}
void writer_init_filewriter2(writer_t*w, char*filename)
{
- int fi = open("movie.swf",
+#ifdef HAVE_OPEN64
+ int fi = open64
+#else
+ int fi = open
+#endif
+ (filename,
#ifdef O_BINARY
O_BINARY|
#endif
msg,
ret,
zs->msg?zs->msg:"unknown");
- perror("errno:");
+ if(errno) perror("errno:");
exit(1);
}
#endif
exit(1);
#endif
}
+static int reader_zlibseek(reader_t*reader, int pos)
+{
+ fprintf(stderr, "Erro: seeking not supported for zlib streams");
+ return -1;
+}
static void reader_zlibinflate_dealloc(reader_t*reader)
{
#ifdef HAVE_ZLIB
memset(r, 0, sizeof(reader_t));
r->internal = z;
r->read = reader_zlibinflate;
+ r->seek = reader_zlibseek;
r->dealloc = reader_zlibinflate_dealloc;
r->type = READER_TYPE_ZLIB;
r->pos = 0;
fprintf(stderr, "bitio.c:reader_readU32: Read over end of memory region\n");
return b1|b2<<8|b3<<16|b4<<24;
}
+
float reader_readFloat(reader_t*r)
{
+ float f;
+ r->read(r, &f, 4);
+ return f;
+
U8 b1=0,b2=0,b3=0,b4=0;
r->read(r, &b1, 1);
r->read(r, &b2, 1);
}
void writer_writeFloat(writer_t*w, float f)
{
- unsigned long v = *(unsigned long*)&f;
+ w->write(w, &f, 4);
+ return;
+
+ unsigned v = *(unsigned*)&f;
unsigned char b1 = v;
unsigned char b2 = v>>8;
unsigned char b3 = v>>16;