X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Frfxswf.c;h=15b7e2a212b9f6a2cb67eade357dbff8bfc84e6a;hb=6d22f1376c2fcad7c872db608630468d3abcca23;hp=a225f7e954db0c508a91e30f43636e3bcd9dfc73;hpb=862d099892e1db70421248467923acc9b80bac21;p=swftools.git diff --git a/lib/rfxswf.c b/lib/rfxswf.c index a225f7e..15b7e2a 100644 --- a/lib/rfxswf.c +++ b/lib/rfxswf.c @@ -48,6 +48,30 @@ #include "./bitio.h" #include "./MD5.h" +// memory allocation + +void* rfxalloc(int size) +{ + void*ptr; +#ifdef HAVE_CALLOC + ptr = calloc(size); +#else + ptr = malloc(size); + memset(ptr, 0, size); +#endif + if(!ptr) { + fprintf(stderr, "FATAL: Out of memory\n"); + /* TODO: we should send a signal, so that the debugger kicks in */ + exit(1); + } + return ptr; +} + +void rfxdealloc(void*ptr) +{ + free(ptr); +} + // internal constants #define MALLOC_SIZE 128 @@ -55,7 +79,6 @@ #define MEMSIZE(l) (((l/MALLOC_SIZE)+1)*MALLOC_SIZE) - // inline wrapper functions TAG * swf_NextTag(TAG * t) { return t->next; } @@ -179,6 +202,13 @@ int swf_SetU16(TAG * t,U16 v) t->data[t->len++] = a[1]; return 0; } +void swf_SetS16(TAG * t,int v) +{ + if(v>32767 || v<-32768) { + fprintf(stderr, "Warning: S16 overflow: %d\n", v); + } + swf_SetU16(t, (S16)v); +} int swf_SetU32(TAG * t,U32 v) { U8 a[4]; @@ -805,6 +835,13 @@ void swf_ResetTag(TAG*tag, U16 id) tag->id = id; } +TAG* swf_CopyTag(TAG*tag, TAG*to_copy) +{ + tag = swf_InsertTag(tag, to_copy->id); + swf_SetBlock(tag, to_copy->data, to_copy->len); + return tag; +} + int swf_DeleteTag(TAG * t) { if (!t) return -1;